2012-12-02 5 views
10

私は次のコードを持っています。これはJavaScriptモジュールです。Javascriptモジュール

(function() { 

    // Object 
    var Cahootsy; 

    Cahootsy = { 
     hello: function() { 
      alert('test'); 
     }, 
    }; 

    (Cahootsy.scope = (function() { 
     return this; 
    })()).Cahootsy = Cahootsy; 

    return Cahootsy; 

}).call(this); 

私はセクションを理解していない:

(Cahootsy.scope = (function() { 
     return this; 
    })()).Cahootsy = Cahootsy; 

私はそれがこの「モジュールを参照するオブジェクトを作成し、グローバルCahootsy変数にCahootsy変数を割り当てていると思います。私が理解できないのは、なぜthisがCahootsyに割り当てられる必要があるのか​​ということです。スコープ

答えて

6

あなたはそうのような、少しそれを打破することができます:それはグローバルスコープ(通常window、常にではない)を取得してい

var getScope = function() {return this;} 
Cahootsy.scope = getScope(); 
getScope().Cahootsy = Cahootsy; 

何。次に、オブジェクトのscopeプロパティを介してCahootsyからグローバルスコープへのリンクを作成し、スコープのCahoostyプロパティを使用してリンクを作成します。

結果として、ブラウザでwindow.Cahootsyがオブジェクトになり、window.Cahootsy.scopeがウィンドウに戻ります。

+0

なぜモジュールはグローバルスコープへの参照を保持していますか?また、単に 'Cahootsy.scope = window'をしないのはなぜですか? –

+3

私が言及したように、 'window'は必ずしもグローバルスコープではありません。例えば、JavaScriptがNode.JS上で実行されている場合、ブラウザは存在しないため、 'window'もありません。 –

+0

これは、グローバルスコープを取得するためのハックな方法のように見えます! :) –

3

(function() { return this; })()はグローバルオブジェクトを返すトリックです。

このステートメントは、将来の使用のためにグローバルオブジェクトにを設定し、Cahootsyを外部に公開するようにグローバルオブジェクトのプロパティを設定します。

関連する問題