在$ .Callbacks()中添加回调函数后,我想再删除它:
var callbacks = $.Callbacks(),
foo = function() { console.log('Hello world') };
callbacks.add(foo);
callbacks.fire(); // logs 'Hello world'
callbacks.remove(foo);
callbacks.fire(); // nothing to trigger, removed perfectly
所以,这可行,但现在我想添加一个匿名函数,如下所示:
callbacks.add(function(){ console.log('Hello anonymous world') });
callbacks.fire(); // logs 'Hello anonymous world'
看起来不错,但我无法删除该功能:
callbacks.remove(function(){ console.log('Hello anonymous world') });
callbacks.remove();
callbacks.fire(); // still logs 'Hello anonymous world'
有没有办法克服这个问题?
答案 0 :(得分:3)
每个OP请求:
函数由指针标识。你没有指向你的匿名函数的指针,所以你没有任何东西要传递给remove()来告诉它要删除哪个函数。简单地传递一个重复的函数不会这样做,因为副本有一个不同的指针。您需要坚持将函数赋值给变量,然后将该变量传递给remove()。
答案 1 :(得分:0)
您可以使用arguments.callee(对自身的引用)从函数本身(如函数的最后一行)中删除它,尽管arguments.callee在“严格模式”下无效。