Взгляните на метод 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
и при сохранении доступа к свойствам объекта в прослушивателе событий будет примерно таким:
var myObj = new MyObj();
document.querySelector("#myElement").addEventListener('click', myObj.handleEvent.bind(myObj));