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
メソッドをイベントリスナーおよびstilとして渡し、イベントリスナーthis
内のオブジェクトプロパティにアクセスできるようにする別の(あまりエレガントではない)回避策 は、次のようになります。
var myObj = new MyObj();
document.querySelector("#myElement").addEventListener('click', myObj.handleEvent.bind(myObj));