JavaScript addEventListener() のスコープについて

Extjs を使っていると、イベント処理をするために「scope:me」または「scope:this」をよく使うと思います。
これを使うと、イベントの呼び出し先 function のthis が、scope オブジェクトになります。
とても便利ですよね。


で、今回「window.postMessage();」 を使う事になったため、「window.addEventListener('message',fn);」について調べたのですがどのページを見ても、呼び出し先 function の this 変更方法が、小さくしか書かれて無かった。
分かりにくかったのでここに書く。



window.addEventListener('message', this.onclick2.bind(this));
または
element.addEventListener('message', this.onclick2.bind(this));


です。 「.bind(this)」 が重要です。


Extjsで書くなら、こんな感じでしょうか。


window.addEventListener("message", me.onWindowMessage.bind(me));

これで、
function : onWindowMessage(event){
    this; // window オブジェクトでは無く、上記「me.onWindowMessage.bind(me)」のmeオブジェクトになる
} 

this は、上記の "me" になります。
this は、"window" ではありません。

作業しやすくなりますね。

因みに、「javaScript 1.8.5(ecmascript 5.1)」以上と言う制限がありますが、もう2011年に策定されています。
対応はここを見た方が早いです。
http://kangax.github.io/compat-table/es5/#Function.prototype.bind
主要ブラウザの最近のバージョンなら対応していますよね。



検索用:window.onmessage this スコープ 変更 ファンクション 呼び出し先 eventListener

コメント

このブログの人気の投稿

ヨドバシカメラの店舗購入履歴を見るには…

C# の WPF の DataGrid で 行を交互に背景色を変える+選択色を変える+カラムが無い所も変える…

Visual Studio の ホットリロードが動かない場合に確認するところ