Hãy xem phương thức handleEvent
https://developer.mozilla.org/en-US/docs/Web/API/EventListener
Javascript "thô":
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);
Bây giờ hãy nhấp vào phần tử của bạn (với id "myElement") và nó sẽ in nội dung sau trong bảng điều khiển:
sự kiện bắt gặp: nhấp vào
ABC
Điều này cho phép bạn có một phương thức đối tượng làm trình xử lý sự kiện và có quyền truy cập vào tất cả các thuộc tính đối tượng trong phương thức đó.
Bạn không thể chỉ truyền trực tiếp một phương thức của một đối tượng đến addEventListener (như thế element.addEventListener('click',myObj.myMethod);
:) và mong đợimyMethod
hoạt động như thể tôi thường được gọi trên đối tượng. Tôi đoán rằng bất kỳ hàm nào được chuyển đến addEventListener bằng cách nào đó được sao chép thay vì được tham chiếu. Ví dụ: nếu bạn chuyển một tham chiếu hàm trình xử lý sự kiện tới addEventListener (ở dạng một biến) thì hủy đặt tham chiếu này, trình xử lý sự kiện vẫn được thực thi khi các sự kiện được bắt.
Một cách giải quyết khác (kém thanh lịch hơn) để chuyển một phương thức làm bộ nghe sự kiện this
và vẫn có quyền truy cập vào các thuộc tính đối tượng bên trong bộ nghe sự kiện sẽ là một cái gì đó như sau:
var myObj = new MyObj();
document.querySelector("#myElement").addEventListener('click', myObj.handleEvent.bind(myObj));