goo blog サービス終了のお知らせ 

いつもどこかでデスマーチ♪

不定期に、私の日常を書き込みしていきます。

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

2014年05月21日 13時50分33秒 | Ext JS 系
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

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Java の final っていつまで... | トップ | Git で困った事、考えたこと... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Ext JS 系」カテゴリの最新記事