我有一个对象:
var myObject = {
open : function() {
console.log('Object open');
$(this).trigger('open');
}
};
$(myObject).on('open', function() {
console.log('Open event received');
});
myObject.open();
此代码会引发过多的递归"。
问题是触发器正在调用方法,如果我重命名open方法,则可以:
var myObject = {
_open : function() {
console.log('Object open');
$(this).trigger('open');
}
};
$(myObject).on('open', function() {
console.log('Open event received');
});
myObject._open();
这对任何人都有意义吗?
答案 0 :(得分:0)
当你试图触发'打开&#39>时,你创建了一个递归循环。再次,
递归循环是一种一遍又一遍地调用自身的函数,直到" stackoverflow"错误发生(没有双关语)。它是一种更有效的循环方式。
在第二种情况下,您触发_open然后该函数尝试触发“打开”#39; event,触发on(' open')监听器。
就这么简单。
答案 1 :(得分:0)
在你的第一个例子中
$(this).trigger('open');
以递归方式触发myObject.open函数的调用。
在第二个
$(this).trigger('open');
触发新的自定义事件'打开'然后使用通过on()方法定义的处理程序处理此事件。
答案 2 :(得分:0)
所以听起来你试图为你的函数执行时创建一个事件监听器?
如果是这样,我就是如何处理这些类型的事件的。我使用绑定到文档的自定义事件,因此它们可以在全局级别使用。
JS小提琴:https://jsfiddle.net/7eaoe1hp/
var myObject = {
open : function() {
console.log('Object open');
$(document).triggerHandler('open');
}
};
$(document).on('open', function(){
console.log('Open event received');
});
myObject.open();