Погляньте на метод 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));