У меня есть объект, который генерирует элементы HTML, которые также связаны с массивом объекта, и, скажем, у нас есть один экземпляр этого объекта. Так как он создает элементы, он также назначает следующий прослушиватель событий вложенной части элемента (класс - uploadDelete).removeEventListener с уникальной анонимной функцией
Теперь слушателю этого события необходимо вызвать метод удаления экземпляра объекта, который его создал, со значением i, присвоенным при его создании. Поскольку события находятся под окном, экземпляр необходимо передать анонимной функции вместе с значением i.
Это поэтому присваивает уникальную функцию событию, и поскольку метод delete будет уничтожать элемент, содержащий слушателя, я хотел бы сначала удалить его; из того, что я прочитал, это может привести к утечкам в противном случае (?). Я также использую Strict Mode, поэтому не arguments.callee.
file.display.getElementsByClassName('uploadDelete')[0].addEventListener('click',
(function(that,i){
return function() {
that.delete(i);
};
})(this,i), false);
Я пробовал много разных вещей, но когда я начал иметь анонимную функцию внутри функции внутри функции, которая затем вызывается в слушателем, я полагал, что я должен просто спросить здесь. У меня может быть решение общей проблемы, изменение другого кода, но это все равно поможет, если на это можно будет ответить.
Вот что я в итоге сделал с помощью ответа Нургуарда. Поскольку уникальность была вытекающей из объекта под названием файла, я просто создал новое свойство файла для хранения функции:
file.deleteFunction = (function(that,i){
return function() {
that.delete(i);
};
})(this,i);
file.display.getElementsByClassName('uploadDelete')[0].addEventListener('click',file.deleteFunction, false);
функции удаления, которая вызывается затем удаляет прослушиватель событий.
Это было похоже на то, о чем я начинал думать. Спасибо за ответ и за это! –