Schauen Sie sich die handleEvent-Methode
https://developer.mozilla.org/en-US/docs/Web/API/EventListener an
"Rohes" 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);
Klicken Sie nun auf Ihr Element (mit der ID "myElement") und es sollte Folgendes in der Konsole drucken:
gefangenes Ereignis: Klicken Sie auf
ABC
Auf diese Weise können Sie eine Objektmethode als Ereignishandler verwenden und auf alle Objekteigenschaften in dieser Methode zugreifen.
Sie können nicht einfach eine Methode eines Objekts direkt an addEventListener übergeben (so :) element.addEventListener('click',myObj.myMethod);
und erwarten myMethod
, dass Sie so tun , als ob ich normalerweise für das Objekt aufgerufen worden wäre. Ich vermute, dass jede an addEventListener übergebene Funktion irgendwie kopiert wird, anstatt referenziert zu werden. Wenn Sie beispielsweise eine Ereignis-Listener-Funktionsreferenz an addEventListener übergeben (in Form einer Variablen) und diese Referenz deaktivieren, wird der Ereignis-Listener weiterhin ausgeführt, wenn Ereignisse abgefangen werden.
Eine andere (weniger elegante) Problemumgehung, um eine Methode als Ereignis-Listener und -Stil zu übergeben this
und dennoch Zugriff auf Objekteigenschaften innerhalb des Ereignis-Listeners zu haben, wäre ungefähr so:
var myObj = new MyObj();
document.querySelector("#myElement").addEventListener('click', myObj.handleEvent.bind(myObj));