看看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);
现在,单击您的元素(ID为“ myElement”),它将在控制台中打印以下内容:
捕获的事件:单击
ABC
这使您可以将对象方法用作事件处理程序,并可以访问该方法中的所有对象属性。
您不能只是将对象的方法直接传递给addEventListener(例如:),element.addEventListener('click',myObj.myMethod);
并且希望myMethod
像在对象上正常调用我那样操作。我猜想传递给addEventListener的任何函数都将以某种方式复制而不是被引用。例如,如果将事件侦听器函数引用传递给addEventListener(以变量的形式),然后取消设置此引用,则在捕获事件时仍将执行事件侦听器。
将方法作为事件侦听器和stil传递this
并仍然可以在事件侦听器内访问对象属性的另一个(不太优雅的)解决方法 是:
var myObj = new MyObj();
document.querySelector("#myElement").addEventListener('click', myObj.handleEvent.bind(myObj));