2012-01-27 6 views
8

windowオブジェクトのすべてのプロパティはグローバル変数です。これは、あなたがこのような何かできることを意味します。このためJavascriptでウィンドウオブジェクトを参照する目的は何ですか?

window.foo = 42; 
alert(foo); //alerts 42 
var bar = 3; 
alert(window["bar"]); //alerts 3 

を、私はいつもあなたがwindowを省略して持つことができたときの目的は、この

if(window.prompt("Enter Password") === "secret") { 
    window.location.hash = "authorized"; 
    window.open("secretPage.html"); 
} 

のようなコードでwindowを参照するのだったかと思ってきました同じことをするコード:

if(prompt("Enter Password") === "secret") { 
    location.hash = "authorized"; 
    open("secretPage.html"); 
} 

使用方法も矛盾しているようです。私はほとんどwindow.alertを見ることはありませんが、私はよくwindow.locationと表示されます。

ちょうど彼らのコードはより冗長にするためにwindowを参照するような人はいますか?私が知りませんこれを行うためのいくつかの正当な理由はありますか?

+0

'window'はグローバルオブジェクトの単なるプロパティです。 – Saxoier

+0

...それ自身を指しています。それは 'ウィンドウを意味するので、興味深いです – Saxoier

+1

=== window.window.window.window.window.window' –

答えて

5

つの状況である(そして、あなたが本当に非常に特別であっても、標準的なJavaScriptで記述することができない、詳細、ウィンドウオブジェクト、またはそれに少なくとも言及を気が。あれば)グローバル変数を変更しようとする関数の中ですぐにクリアされることを意味します。たとえば:

function blah() { 
    // a bunch of code preceding... 
    test = "aha!"; 
} 

誰かがvartestを宣言することを忘れていましたか?あるいは、このグローバルな意図的な変更ですか?比較:

function blah() { 
    // a bunch of code preceding... 
    window.test = "aha!"; 
} 

ここでは、何が意図されているかがすぐに分かります。もちろん、あなたが知っている、グローバルは最初に避けなければならないが、あなたは私のポイントを得る。

1

ウィンドウは暗黙的ですが、それは可能なあいまいさを避けるために良いコードの練習です。

+1

それは、あいまいさを避けるために良いでしょうが、私は、私はそれがあいまいかもしれない方法を見てわかりません。 –

+0

新しいウィンドウを開く以外の何かをした "open"という関数を書いたとしますか?または、インポートしたエイリアンのjsファイルがグローバルな名前空間を汚染している可能性があります。 –

+1

グローバル変数 'var open = 3;'を作成して 'window.open()'を実行しようとすると、 'window.open'が上書きされたためエラーが発生します。グローバル名前空間を汚染するAlien jsファイルは、 'open'または' window.open'のどちらを使用するかにかかわらず、期待される動作を変更します。 –

2

は、私は一般的に囲んでいるクロージャ内の他の変数との潜在的な衝突を避けるために使用さだと思います。また、jslintのようなスタイルチェッカーは、明示的なオブジェクトなしでグローバルプロパティにアクセスするとエラーを発生させます(windowのようなよく知られているプロパティを除いて)。

つまり、ブラウザでは、 iframeなどでは、ウィンドウオブジェクトへの参照を明示的に渡す必要があるかもしれません。それは、明示的であることを助けている

関連する問題