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