4

私はqunitのコードを調べていました。

私の質問は、なぜプロパティを介してqunitオブジェクトをウィンドウオブジェクトにアタッチしたいのかということです。

これがファイルへのリンクです。11行目を見てください。

firebugを使用して実行された単体テストを見ると、それがwindowのプロパティであることがわかります。

[編集]追加:特定の名前空間で物事を宣言するためのベストプラクティスの特定のリファレンスはありますか?

4

2 に答える 2

7

すべてのグローバルオブジェクト(関数、変数など)は、ウィンドウの子であり、デフォルトのコンテキストです。

例:window.jQueryまたはwindow.$

このように考える方が簡単かもしれません...他にどこに置きますか?この一般的なことをしているときは、デフォルトの場所に貼り付けるのが最善(または少なくとも最も簡単)です。多くの関数やオブジェクトなどで複雑なことをしている場合は、それらを名前空間またはオブジェクト内に配置するのが最適です。たとえば、jQueryのすべてのコードは下jQueryにあり、のようにDOMのルートに散らばっているのではwindow.ajaxなく、jQuery.ajaxです。

これは非常にすっきりしていますが、いくつかのアイテムを扱う場合はおそらくやり過ぎですが、これが当てはまる場合は、それらが一意であることを確認することをお勧めします... qunitが行うように、オブジェクトの前にqunit-

于 2010-03-24T02:13:17.023 に答える
2

のプロパティとしてグローバルをアタッチすることwindowは悪い習慣です。すべてのグローバルは、を使用して宣言する必要がありますvar。これが私の理由です:

  1. これにより、ソースコードの静的分析がはるかに困難になります。スクリプトを見ても、どのグローバルがいつ宣言されるかを判断することはできません。宣言されていないグローバルは、使用されている場合はを作成ReferenceErrorします。使用varすると、JavaScriptの巻き上げが有効になり、この問題が軽減されます。
  2. この方法で作成されたグローバルは根本的に異なり、コードがこれを検出する簡単な方法はありません。最大の違いは、[[DontDelete]]この方法で作成されたグローバル変数がないことです。つまり、グローバル変数を削除できます。これはばかげています。
  3. グローバルスコープの外からグローバルを宣言するように誘惑します。これは魔法であり、それは悪い魔法です。しないでください。

私に関する限り、window.x = 1名前付きのグローバル変数を作成するという事実xは、JavaScriptの興味深い好奇心ですが、使用したり、返信したりしないでください。windowただし、は他のオブジェクトと同じように(多かれ少なかれ)オブジェクトであるため、のプロパティを使用するのには十分な理由があります。window.onloadこのような場合は、たとえば、だけでなくフルネームを使用する必要がありますonload

于 2010-03-24T06:15:41.443 に答える