- 2008-02-12 (火)
- 技術
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な情報をあなたに





