【发布时间】:2012-04-16 17:51:05
【问题描述】:
给$.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'
有没有办法克服这个问题?
【问题讨论】:
-
函数由指针标识。您没有指向匿名函数的指针,因此您无需传递给
remove()来告诉它要删除哪个函数。简单地传递一个重复的函数是行不通的,因为重复的有一个不同的指针。您需要坚持将函数分配给变量,然后将该变量传递给remove()。 -
也许有一种方法可以检测匿名函数并为其分配一个变量。然后,在删除另一个匿名者时,检查它们是否相同?
-
没有。它们永远不会相同,因为它们有不同的指针。
-
还有没有办法比较这两个函数?也许有一些字符串化魔法? (去除空格等...)
-
$.Callbacks()没有内置。您必须获取源代码并对其进行扩展。
标签: javascript jquery callback