2017-02-01 5 views
2

私は "雄弁なjavascript"の本を読んできましたが、modulesの章では少ししか得られません。インタフェースとしてのオブジェクト

(function(exports) { 
 
    var names = ["Sunday", "Monday", "Tuesday", "Wednesday", 
 
       "Thursday", "Friday", "Saturday"]; 
 

 
    exports.name = function(number) { 
 
    return names[number]; 
 
    }; 
 
    exports.number = function(name) { 
 
    return names.indexOf(name); 
 
    }; 
 
})(this.weekDay = {}); 
 

 
console.log(weekDay.name(weekDay.number("Saturday"))); 
 
// → Saturday

しかし、彼はあると言うことを、次のもの:

前のパターンは、一般的に意図JavaScriptのモジュールで使用される

彼(作者)は私たちにこのコードを与えますブラウザのために。モジュールは、単一のグローバル変数を要求し、独自のプライベートネームスペースを持つためにコードを関数にラップします。 B このパターンでは、複数のモジュールが同じ名前を要求したり、2つのバージョンのモジュールを同時に読み込んだりすると、問題が発生します。

私はパターンの問題を理解することができない、誰かが私をより具体的に説明することができますか?ありがとう。

+0

誰かが一緒に来て、「(exports){exports.name = function(){return "Mike";};})(this.weekday = {});コンソールに? –

答えて

2

コードは、基本的にweekDayというグローバル変数を作成しています(ブラウザのthisは、それが確立されている外部コンテキストでwindowsになります)。したがって、別のモジュールも 'weekDay'という名前のグローバルを作成しようとすると、競合が発生します。それを定義する最後のものが勝ち、他の定義は吹き飛ばされます。

このモジュールを2回ロードしようとすると(なぜこの場合、一般的には)、その名前のグローバルスペース内に1つの変数しか持てないのでできません。

+0

私はそれを得る、ありがとう。 –

+0

うれしい – rasmeister

関連する問題