添加的回調函數,$ .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