私のプラグインが任意の JS エンジン (ブラウザー内かどうかに関係なく) で実行できることを考えると、
window
一部の変数が実際にブラウザオブジェクトであることをどのように知ることができますか。someVar
ブラウザwindow
オブジェクトを参照しているかどうかをどのように知ることができますか。それが本当にブラウザオブジェクトであるかwindow
どうかを確認できるものはありますか?window
また、オブジェクトを含む変数
window
だけでなく、ブラウザオブジェクトが実際に存在するかどうかを確認する方法。window
someVar
が単独であるかどうかわからず、 のような実際のブラウザーオブジェクトwindow
と照合したいとします。どのようにして、それがブラウザーであり、 という名前の外部スコープからの他のオブジェクトではないことを確認しますか?別の環境からグローバル?window
someVar === window
window
window
window
もう少し明確にするために:
- 私は環境のグローバルを探しているわけではありません。
window
特にブラウザオブジェクトを探しています。 - スクリプトがブラウザで実行されているかどうかは確認していません。
スコープ外のどこかで宣言された別のオブジェクトである可能性があるif(!window)
ため、次のようなことはできません。window
function someFunction(){
var window = {foo:'bar'};
(function(){
console.log(window); //{foo:'bar'}
}());
}
if(window.window === window)
自己参照もできるため、確認できません。前述のようにwindow
、外部スコープのオブジェクトである可能性があります。
var bar = {};
bar.bar = bar;
bar.bar.bar.bar.bar.bar === bar; //true
また、スクリプトはグローバル空間以外でラップまたは連結される可能性があるため、次の例は機能しない可能性があります。、または などのthis
呼び出しで変更することもできます。call()
apply()
bind()
//Stand-alone, I can assume window is global since "this" is the global in global space
(function(window){
//window may not be window
}(this));
//But when this happens
someNamespace.someFunction = function(){
(function(window){
//window may not be window
}(this));
}
//or this:
someNamespace.someFunction.call({});
これは重複しているように感じますが、最初に見た場所を見つけることができませんでした。