JavaScript thisキーワード
例
これは何ですか?
JavaScriptでは、this
キーワードはオブジェクトを指します。
どのオブジェクトがどのように呼び出されるか(使用または呼び出されるか)によって異なります。
this
キーワードは、使用方法に応じてさまざまなオブジェクトを参照します。オブジェクトメソッドでは、オブジェクトthis を参照します。 |
単独で、グローバルオブジェクトthis を参照します。 |
関数内では、グローバルオブジェクトthis を参照します。 |
関数のstrictモードでは、this は未定義です。 |
イベントではイベントを受信した要素this を指します。 |
call() 、apply() 、bind() などのメソッドは
this を任意のオブジェクトに参照できます。 |
注
thisは変数ではなくキーワードです。 thisの値を変更することはできません。
thisをメソッド内で使う場合
オブジェクトメソッドで使用される場合のthis
は、オブジェクトを参照します。
このページの上部の例では、personthisthis
オブジェクトを参照しています。
なぜならfullNameメソッドはpersonオブジェクトのメソッドであるためです。
thisを単体で使う場合
単独で使用される場合の、this
はグローバルオブジェクトを指します。
なぜならthis
はグローバルスコープで実行されているためです。
ブラウザウィンドウでは、グローバルオブジェクトは次のようになります[object Window]
:
strictモードで、this
を単独で使用する場合、グローバル オブジェクトも参照します
thisが関数内にある場合 (デフォルト)
関数では、グローバル オブジェクトはthis
のデフォルトのバインディングです。
ブラウザ ウィンドウでは、グローバル オブジェクトは次のようになります[object Window]
。
thisが関数内で使用される場合 (厳密)
JavaScriptstrictモードでは、デフォルトのバインディングが許可されません。
そのため、strictモードの関数内で使用すると、this
はundefined
になります。
thisをイベントハンドラーで使用する場合
HTMLイベントハンドラーでは、this
イベントを受け取ったHTML要素を参照します。
オブジェクトメソッドのバインド
これらの例では、this
はperson オブジェクトを指します。
例
例
つまりthis.firstNameはthis(person オブジェクト)のfirstNameプロパティです。
明示的な関数バインディング
call()
とapply()
メソッドは、事前定義されたJavaScriptメソッドです。
どちらも、別のオブジェクトを引数として使用してオブジェクト メソッドを呼び出すために使用できます。
以下の例では、person2を引数としてperson1.fullNameを呼び出します。this.fullNameがperson1 のメソッドであっても、person2を参照します。
例
関数の借用
メソッドを使用するとbind()
、オブジェクトは別のオブジェクトからメソッドを借用できます。
この例では、2つのオブジェクト(個人とメンバー)を作成します。
memberオブジェクトはpersonオブジェクトからfullnameメソッドを借用します。
例
thisの優先順位
どのオブジェクトがthis
を参照しているか判断するには、次の順序の優先順位を使用します。
優先順位 | Object |
1 | bind() |
2 | apply() and call() |
3 | Object method |
4 | Global scope |
this
は、bind()を使用して呼び出される関数内にありますか?this
は、apply()を使用して呼び出される関数内にありますか?this
は、call()を使用して呼び出される関数内にありますか?this
は、オブジェクト関数(メソッド)内にありますか?this
は、グローバルスコープの関数内にあります。
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。