Взгляните на метод handleEvent
https://developer.mozilla.org/en-US/docs/Web/API/EventListener
«Сырой» Javascript:
function MyObj() {
this.abc = "ABC";
}
MyObj.prototype.handleEvent = function(e) {
console.log("caught event: "+e.type);
console.log(this.abc);
}
var myObj = new MyObj();
document.querySelector("#myElement").addEventListener('click', myObj);
Теперь нажмите на ваш элемент (с идентификатором «myElement»), и он должен напечатать в консоли следующее:
пойманное событие: клик
ABC
Это позволяет вам использовать метод объекта в качестве обработчика событий и иметь доступ ко всем свойствам объекта в этом методе.
Вы не можете просто передать метод объекта напрямую addEventListener (например: element.addEventListener('click',myObj.myMethod);
) и ожидать, что myMethod
будет действовать так, как если бы меня обычно вызывали для объекта. Я предполагаю, что любая функция, переданная addEventListener, каким-то образом копируется вместо ссылки. Например, если передать ссылку на функцию прослушивателя событий в addEventListener (в форме переменной), а затем сбросить эту ссылку, прослушиватель событий по-прежнему выполняется при перехвате событий.
Другой (менее изящный) обходной путь для передачи метода в качестве прослушивателя событий и стиля this
и все еще иметь доступ к свойствам объекта в прослушивателе событий будет выглядеть примерно так:
// see above for definition of MyObj
var myObj = new MyObj();
document.querySelector("#myElement").addEventListener('click', myObj.handleEvent.bind(myObj));