添加的回调函数,$ .Callbacks()后,我想再次将其删除:jQuery.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()。 – 2012-04-16 17:54:29
也许有一种方法来检测匿名函数并为其分配一个变量。然后,当删除另一个匿名者时,检查它们是否相同? – Kriem 2012-04-16 17:56:21
不,他们永远不会是一样的,因为他们有不同的指针。 – 2012-04-16 17:59:48