JavaScriptのthisを理解する
thisについて、恥ずかしいことに1つ勘違いして理解していた点があったので、自分の中で頭を整理した。
まず、thisを一言で説明すると、次の通りだ。
thisとは、関数内ではthisを使用中の関数をメンバに含むオブジェクト*1を指し、トップレベルコード*2ではグローバルオブジェクトを指すキーワード。
下記のJavaScriptを例に解説する。
thisは10行目と13行目と15行目の3箇所で使用されている。
まず、10行目。
- thisを使用中の関数は、say関数だ。
- sayをメンバに含むオブジェクトは、graySpaceオブジェクトだ。
- 従って、10行目のthisは、say関数をメンバに含むgraySpaceオブエジェクトを指すので、this.nameはgraySpace.nameと等価である。
- 故に、10行目のthis.nameは文字列「graySpace」である。
次に、13行目。
- thisを使用中の関数は、loadイベントのイベントハンドラだ。
- このイベントハンドラをメンバに含むオブジェクトは、windowオブジェクトだ*3。
- 従って、13行目のthisは、イベントハンドラをメンバに含むwindowオブジェクトを指すので、this.nameはwindow.nameと等価である。
- 故に、13行目のthis.nameは文字列「global」である。
最後に、15行目。
- 関数の一部ではないJavaScriptコード部分でthisが使用されている。
- つまり、15行目のthisは、トップレベルコードで使用されているのでグローバルオブジェクトwindowを指し、this.nameはwindow.nameと等価である。
- 故に、13行目のthis.nameは文字列「global」である。