我有一个生成 HTML 元素的对象,这些元素也与对象数组相连,假设我们有一个它的实例。因此,当它创建元素时,它还将以下事件侦听器分配给元素的嵌套部分(uploadDelete 类)。
现在这个事件监听器需要调用创建它的对象实例的 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 的对象,我只是创建了一个新的 file 属性来存储函数:
file.deleteFunction = (function(that,i){
return function() {
that.delete(i);
};
})(this,i);
file.display.getElementsByClassName('uploadDelete')[0].addEventListener('click',file.deleteFunction, false);
然后调用的删除函数删除事件侦听器。