使用jQuery触发具有相同功能的对象上的事件时的无限循环

Mad*_*aks 6 javascript oop jquery events

这个头衔可能没多大帮助,我试过了.无论如何,我遇到了这个非常神秘(令人沮丧)的错误,导致RangeError: Maximum call stack size exceeded我写了一些OO JS.花了我几个小时,但我终于找到了原因.这是一个简单的例子,它将导致相同的异常:

// Class
var Foo = function(){
    // "Public" function
    this.bar = function(){
        console.log('loop!');
        $(this).trigger('bar');
    }
}

var foo = new Foo();
$(foo).trigger('bar');
Run Code Online (Sandbox Code Playgroud)

运行此代码将导致loop!多次登录到控制台,最终导致范围异常.

显然有一些关于jQuery的trigger功能,我不明白,它归结为:为什么foo的bar功能会被调用? 是的,事件名称和类的函数名称是相同的,但我不明白这两者是如何相关的.

Hac*_*tly 7

您需要使用它.triggerHandler来缓解此问题.

根据jQuery文档:

注意:对于除窗口之外的普通对象和DOM对象,如果触发的事件名称与对象上的属性名称匹配,则如果没有事件处理程序调用event.preventDefault(),jQuery将尝试将该属性作为方法调用.如果不需要此行为,请.triggerHandler()改用.

http://jsfiddle.net/bcsqF/