関数がオブジェクトにアタッチされて呼び出されると、次のようになります。
function f() { return this.x; }
var o = {x: 20};
o.func = f;
o.func(); //evaluates to 20
this
関数がメソッドとして呼び出されたオブジェクトを参照します。するのと同じf.call(o)
です。
関数がオブジェクトの一部として呼び出されない場合this
、グローバル オブジェクトを参照します。関数が非オブジェクト コンテキストから呼び出されているかどうかを確認するにはどうすればよいですか? グローバル オブジェクトにアクセスするための標準的なキーワードはありますか? このようなことをする唯一の方法はありますか?
globalobj = this;
function f() { if (this == globalobj) doSomething(); }
注: ここでは特定の使用例を念頭に置いているわけではありません。実際には、この正確なメカニズムについて質問しています。