質問

関数は物体に取り付けられ、呼び出されると

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(); }

注:私はここに心の中で特別なユースケースを持っていない - 私は実際にこの正確なメカニズムについて尋ねています。

役に立ちましたか?

解決

グローバルオブジェクトが実際にあるウィンドウを行うことができますので、

if (this === window)

他のヒント

以下のグローバルスコープでそれを呼び出すヌルの値とFunction.callを使用しているために動作する必要があります。

this === ((function () { return this; }).call(null))

シンプルな変種、

this === (function () { return this; })()

も動作しますが、私は最初の意図が明確になりますだと思います。

RoBorgの答えは、概念的には正しいです - window除いて(そう、これは必ずしもワーカースレッドなどを除く、ならびに任意の非ブラウザが少なくを取得しているJSを、ホストされたブラウザのメインスレッドのコンテキストでのみ使用可能です珍しい)。

あなたの最も安全な賭けは、あなたが上記の持っていたものは基本的ですが、インタプリタは、より完全なアクセスを最適化することが可能であるとして、あなたはvar===を使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top