thisキーワードについて

2017年2月25日

関数内において利用できるthisキーワードについて説明します。thisは呼び出す場所(コンテクスト)によって参照先が変わる特別な変数です。

 

スポンサーリンク

 

 

そのパターンは下記のように分けられます。

 

 呼び出す場所  参照先
 関数

 グローバルオブジェクト

 メソッド  呼び出し元のオブジェクト
 コンストラクタ  生成したインスタンス
 call/applyメソッド  引数で指定されたオブジェクト
 イベントリスナー  イベントの発生元

 

関連ページ

call/applyメソッドについて[Function]

 

オブジェクトについて[コンストラクタ関数][new演算子]

 

 

 

関数:グローバルオブジェクト


 

関数内のthisはグローバルオブジェクト(Window)を参照します。

 

下記コードではbook()関数が実行される際に、thisは1行目のtitle(こころ)が参照されます。つまり、this.titleはwindow.titleと同じです。

 

 

Strictモードの場合、関数内のthisはグローバルオブジェクトを参照せず「undefined」となります。従って上記コードはエラーとなります。

 

関連ページ

Strictモードについて

 

 

メソッド:呼び出し元のオブジェクト


 

メソッドは、オブジェクトのプロパティとなっている関数です。

 

下記のコードではbookオブジェクトにおいてgetTitleメソッドがあります。メソッド内のthisは呼び出し元のオブジェクトを参照するので、4行目のthisは、bookオブジェクトを参照することになります。つまりthis.titleはbook.title(こころ)と同じになります。

 

 

 

メソッドの中に関数がある場合を想定してみます。

 

8〜10行目

getTitleメソッドの中にgetTitle2関数があります。関数内のthisはグローバルオブジェクトを参照するので、getTitle2関数内のthis.titleは1行目のtitle(人間失格)を参照します。

 

このようにthisの参照先がわかりにくい場合、thisを別の変数に置き換えるテクニックがあります。

 

7行目
self変数を用意して(他にthatという名前が良く利用されます)、thisを代入しています。

 

メソッド及び関数内の他のthisをselfに置き換えています。

 

 

スポンサーリンク

 

Copyright © 2017 ウェブの葉 All Rights Reserved.  プライバシーポリシー