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 に直接渡すだけで (そのように: ) 、オブジェクトに対して通常どおりに呼び出されたかのように動作することを期待することはできません。addEventListener に渡された関数は、参照されるのではなく何らかの形でコピーされていると推測しています。たとえば、イベント リスナー関数の参照を (変数の形式で) addEventListener に渡し、この参照を設定解除すると、イベントがキャッチされたときにイベント リスナーが引き続き実行されます。element.addEventListener('click',myObj.myMethod);
myMethod
メソッドをイベント リスナーとして渡し、 this
まだイベント リスナー内のオブジェクト プロパティにアクセスできる別の (あまり洗練されていない) 回避策は、次のようになります。
// see above for definition of MyObj
var myObj = new MyObj();
document.querySelector("#myElement").addEventListener('click', myObj.handleEvent.bind(myObj));