Home > 技術 > JavaScriptでthisキーワードはどこを参照しているの?

JavaScriptでthisキーワードはどこを参照しているの?


JavaScriptのcalleeプロパティは関数オブジェクトを返すよの続きです。
「arguments.callee」で関数オブジェクトを取得する方法は分かったのですが、これに「this」をつけて「this.arguments.callee」とした場合はどうなるのか試してみました。

thisは本来カレントオブジェクトを指定する演算子になるので、一般的には

 var obj = new Object();
 obj.func = function(){}
 obj.func();

で赤くなっている部分のオブジェクトを参照しています。
一見thisはfunc関数自体を保持しているように見えますが、実際にはobjというオブジェクトを参照しています。
なので、

 var obj = new Object();
 obj.func = function(){
  alert(this.arguments.callee);
 }
 obj.func();

と参照してもthisの部分でエラーになってしまいます。
これはthisで指定したオブジェクトはobjになるので、objオブジェクトがargumentsオブジェクトを保持していないのが原因です。
argumentsオブジェクトは関数情報を保持しているCall(Activation)オブジェクトが持っているので、thisであるobjにはないオブジェクトになります。
やや難しいですね。

では以下のようにするとどうなるでしょうか。

 var func = function(){
  alert(this.arguments.callee);
 }
 func();

この場合はthisとなるオブジェクトが存在しません。
どこのオブジェクトにも所属していない関数はグローバルオブジェクトに所属します。

なので、上記の場合のthisはwindowオブジェクトとなりargumentsオブジェクトを保持していないのでエラーとなる。

なかなか複雑ですが、thisの意味あいが大分理解できたと思います。

Trackback:0

TrackBack URL for this entry
http://hisasann.com/cgi-bin/mt/mt-tb.cgi/894
Listed below are links to weblogs that reference
JavaScriptでthisキーワードはどこを参照しているの? from HouseTect, JavaScriptな情報をあなたに

Home > 技術 > JavaScriptでthisキーワードはどこを参照しているの?

Tag cloud
カテゴリー
月別アーカイブ
Powered by
Powered by
Movable Type Commercial 4.261

Page Top