Каков наилучший способ отвязать обработчики событий в методе уничтожения простого плагина JS? Следующий (нерабочий) код должен продемонстрировать, что я имею в виду:
var myPlugin = (function(){
function myPlugin(selector){
var elems = document.querySelectorAll(selector);
for (var i=0; i<elems.length; i++) {
function _handler(){ console.log('Hello'); }
elems[i].addEventListener("click", _handler);
}
this.destroy = function(){
document.removeEventListener("click", _handler);
};
}
return myPlugin;
})();
Итак, я перебираю набор элементов и что-то с ними делаю, в том числе подключаю функцию обработчика событий. Проблема: в простом JS мне нужна ссылка на исходный обработчик, чтобы удалить его, когда экземпляр плагина будет уничтожен.
Этот фрагмент, естественно, не может работать, потому что функция обработчика события записывается снова и снова с каждым выбранным элементом.
Один из способов справиться с этим: создание функций с динамическим/уникальным именем, как описано здесь: Динамическое создание функций в JS. Функция должна быть глобально установлена для объекта окна. Затем мне просто нужно запомнить имя (например, используя атрибут данных для выбранного элемента), и с его помощью позже можно отменить привязку события.
Однако этот подход неуклюж, и я сталкиваюсь с проблемами в IE8 при использовании такой функции с attachEvent. Есть ли лучший способ или лучшая практика для этого?