2012-10-04 8 views
5

私はこのコードを、EaselJSライブラリの例で使っています。それは、createjsライブラリ全体の名前空間を "window"に割り当てているのです。Javascriptの名前空間をWindowに設定する:悪い考えですか?またはブリリアント?

<script> 
var createjs = window; 
</script> 

私の質問はこれです: は、ウィンドウには本当にばかなアイデアをライブラリの名前空間を設定していますか?すべての名前空間変数を突然グローバルスコープにすることによって、名前空間を使用するという全体的な点を取り除くだけではありませんか?

私が見ることができる唯一の利点は、オブジェクトに短いコンストラクタを書くことができることです。たとえば、タイピング:

stage = new Stage(canvas); 

の代わり:

stage = new createjs.Stage(canvas); 

は、これは悪い考えです、またはで何とか華麗な、あるいは単に無害風変わりなのですか?

+0

'createjs'の範囲を変更することができます。私はそれが本当にそれのように見たことがない。 – Blender

+0

グローバルでない場合は、他にどのように公開しますか? –

+0

@ user1689607 - その名前空間。私が理解していることは、グローバルオブジェクトとして公開したくないということです。それが存在する理由です。変数の命名の衝突の変更を減らす。しかし、私は確信していません:したがって、質問です。 –

答えて

2

私のための良いアイデアは、多くの人が積極的に使うべきものです。つまり、実際にはネームスペースのアイデアを打ち破っているのです。つまり、多くの人々(他の人気のあるJSライブラリの作者)がネームスペースのルートとしてwindowを使い始めると、メソッドを上書きする害別のメソッドを上書きすると、そのようなアプローチの可能性のある利点は無効になります。

+0

私はこの答えについてもっと詳しく知りたいですが、質問に答えているようだし、反対意見も出ていないので、私はそれを受け入れます。要約:それは悪い考えです。ありがとう。 –

5

これがこのように設定された理由は、名前空間ではない以前のバージョンとの下位互換性を維持するためです。これにより、開発者は、コードをすべてリファクタリングすることなく、最新のバージョンにアップグレードすることができます。

1

実際はそれによって異なります。複数のJSライブラリを使用している場合、すべてのライブラリを楽しむためにNamespace to Windowを避けることができます。

ゲーム/アプリケーション用に1つのライブラリ(CreateJS)を使用している場合、カスタム名前空間の名前を繰り返し書き込むために多くの時間を節約するために名前空間 - ウィンドウを使用することを検討することがあります。私はCreateJSでゲームを構築するときに便利な方法です。