今回はJavaScriptのthisについて。
JavaScriptのthisの場合、呼び出し方によってthisの参照先が変わります。
4種類あるとされていますが、使われ方で分類すると私の場合、下記のようになるケースが多かったです。
- グローバル
- オブジェクト内
- イベントハンドラ内(jQueryなどでよく使われる)
- apply,callなどによる強制
- アロー演算子による変更
グローバル
呼び出す場合に、呼び出しもとがオブジェクトでない場合、グローバルオブジェクト、つまりはwindowオブジェクトをさします。関数パターンなどと呼ばれているものかと思います。
オブジェクト内
オブジェクトで定義されている場合、オブジェクト自身をさします。メソッドパターンやコンストラクタパターンです。オブジェクトと考えるとわかりやすいのではないかと(私は)思います。
イベント時
下記のようなケースです。
1 2 3 |
$(セレクタ).click(function(){ $(this) }) |
オブジェクトパターンの一種ですが、この場合、thisの参照先は自分自身をさします。
apply,callによる強制
参照先を変えたいときなどです。
アロー演算子による変更
注意点として、アロー演算子を使うとthisの参照先が変わります。
1 2 3 4 5 6 7 8 9 10 |
$(セレクタ).click(function(){ //自分自身 $(this) }) $(セレクタ).click(()=>{ this.〜 //外のオブジェクト //もし自分自身を参照したいときは$(event.currentTarget)と書きます。 }) |
概念的には近いと思いますが、ES6で書いていて親元を呼びたいとき、superとした時もアロー演算子で書いておかないと親を継承できないケースがありましたので注意。
ソースですが、参考リンクの方がわかりやすかったのでリスペクトも兼ねてリンクを貼ります。
参考リンク
thisって何?使い方を覚えて、JavaScriptをもっと楽しく使おう!
JavaScript の this を理解する多分一番分かりやすい説明
色々とわかりやすい関数があるのですが、説明読むより、これも色々とコードを書いて格闘しないとわからないですね・・・