jQuery.Callbacks - 删除匿名函数回调

时间:2012-04-16 17:51:05

标签: javascript jquery callback

在$ .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'

有没有办法克服这个问题?

2 个答案:

答案 0 :(得分:3)

每个OP请求:

函数由指针标识。你没有指向你的匿名函数的指针,所以你没有任何东西要传递给remove()来告诉它要删除哪个函数。简单地传递一个重复的函数不会这样做,因为副本有一个不同的指针。您需要坚持将函数赋值给变量,然后将该变量传递给remove()。

参考:http://api.jquery.com/category/callbacks-object/

答案 1 :(得分:0)

您可以使用arguments.callee(对自身的引用)从函数本身(如函数的最后一行)中删除它,尽管arguments.callee在“严格模式”下无效。