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功能会被调用? 是的,事件名称和类的函数名称是相同的,但我不明白这两者是如何相关的.
您需要使用它.triggerHandler来缓解此问题.
根据jQuery文档:
注意:对于除窗口之外的普通对象和DOM对象,如果触发的事件名称与对象上的属性名称匹配,则如果没有事件处理程序调用event.preventDefault(),jQuery将尝试将该属性作为方法调用.如果不需要此行为,请
.triggerHandler()改用.