2016-08-11 9 views
2

は、この例ではhttp://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.htmlエクスポートとモジュールの割り当ての違いは何ですか?それは同じいずれかの方法で動作するとき

var FOO = (function(exports) { 

    //What is the difference between this: 
    exports.hello = "hello"; 
    return exports; 

}(FOO || {})); 

var FOO = (function(exports) { 

    //And this: 
    FOO.world = "world"; 
    return exports; 

}(FOO || {})); 

//When the result works either way: 
alert(FOO.hello + " " + FOO.world); 

で説明した「緩い増強」モジュールのパターンに基づいて、次のコードを考えてみましょう、なぜ一つはexportsFOOに割り当てるでしょうか?違いはなんですか?

+0

ありません:リンクあなたのゲームであっても、単純な「モジュールのエクスポート」バージョンがすでに代わりに直接モジュールに割り当てるのモジュールのための「私」の変数を使用する方法

注意してください。 「輸出」のようなものを使用することへのボーナスは、あなたが輸出しているものを自動的に読者に伝えることです。 'FOO.world'は' exports.world'と同じか、明示的に 'exports.world'と書くことができます。その後、すべてのコードが同じ種類のパターンに従います。それは、読者に考えさせることを少なくします。 –

答えて

2

2つのバージョンは同等ではありません。 2番目のエラーは、FOO.worldを割り当てようとするとエラーになります。なぜなら、FOOはまだ定義されていないからです。今では、最初のモジュール定義がFOOオブジェクトを作成しているため、コードは動作しています。

なぜexports変数が主な理由は、モジュール定義からモジュール名を切り離すかということです。一度モジュール名(FOO)を書く必要があります。サーバサイド環境にある場合、モジュール名(ファイル名から暗示されています)を使用する必要はありません。

var MODULE = (function() { 
    var my = {}, 
     privateVariable = 1; 

    function privateMethod() { 
     // ... 
    } 

    my.moduleProperty = 1; 
    my.moduleMethod = function() { 
     // ... 
    }; 

    return my; 
}()); 
関連する問題