イベントハンドラー関数をJavascriptオブジェクトの一部として使用したいと思います。イベントハンドラー内の「this」は、通常、イベントが発生したオブジェクトに自動的に割り当てられるため、イベントハンドラー内の「this」をメソッドであるオブジェクトにバインドしたいと思います。
これは、バインディングが発生するオブジェクトのinit関数(tryoutの場合はjsfiddle)を使用して実行できます。
var myObject = {
init:function(){
this.downHandler = this.downHandler.bind(this);
},
downHandler:function(){
alert(this.someInfo);
},
someInfo:"hi there"
}
myObject.init();
これを避けたい:他の場所で再定義すると、コードの保守性が低下します。だから私は、メソッド自体でバインドのプロセスを維持するソリューションを探しています。
すでに関数の即時実行を試みましたが、即時実行の時点で、「this」は「window」オブジェクトを指しています(ブラウザーコンテキストを想定)。私の試験は次のようになります。
var myObject = {
//more code
downHandler:(function(){
alert(this.someInfo);
}).bind(this), //does not work since at the point of immediate execution, the this is assigned to window
//more code
}
別のinit関数ではなく、イベント処理関数でバインディングを維持する方法を考えられますか?