我有一個對象,生成的HTML元素也與對象的數組連接,讓我們說我們有一個它的實例。所以當它創建元素時,它還會將以下事件偵聽器分配給元素的嵌套部分(類爲uploadDelete)。removeEventListener與唯一匿名函數
現在,此事件偵聽器需要調用創建它的對象實例的delete方法,並在創建時指定i的值。由於事件在Window下,因此需要將實例與i值一起傳遞給匿名函數。
因此,這爲事件分配了一個非常獨特的函數,並且因爲delete方法將銷燬包含偵聽器的元素,所以我希望先刪除它;從我讀過的話可能會導致泄漏,否則(?)。我也使用嚴格模式,所以不使用arguments.callee。
file.display.getElementsByClassName('uploadDelete')[0].addEventListener('click',
(function(that,i){
return function() {
that.delete(i);
};
})(this,i), false);
我已經嘗試了很多不同的東西,但是當我開始有一個功能,然後將其稱爲聽者的內部函數內部的匿名函數,我想我應該只問就在這裏。我可能會解決整體問題,改變其他代碼,但如果能夠回答這個問題,它仍然有幫助。
下面是我最終在Norguard的答案幫助下做的。由於獨特性是從一個對象調用的文件而產生的,我剛剛創建的文件的一個新的屬性來存儲功能:
file.deleteFunction = (function(that,i){
return function() {
that.delete(i);
};
})(this,i);
file.display.getElementsByClassName('uploadDelete')[0].addEventListener('click',file.deleteFunction, false);
刪除功能被調用,然後刪除該事件監聽器。
這與我開始考慮的事情類似。感謝您的答覆,並清除這些事情! – 2013-03-21 21:04:00