1

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

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

4

2 回答 2

3

根据 OP 请求:

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

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

于 2012-04-17T14:34:20.347 回答
0

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

于 2015-11-13T23:15:48.770 回答