5
に私は、このリンクhttp://addyosmani.com/largescalejavascript/#modpatternカプセル化はjavascriptのモジュールパターン
を読み、次の例を見ました。
var basketModule = (function() {
var basket = []; //private
return { //exposed to public
addItem: function(values) {
basket.push(values);
},
getItemCount: function() {
return basket.length;
},
getTotal: function(){
var q = this.getItemCount(),p=0;
while(q--){
p+= basket[q].price;
}
return p;
}
}
}());
basketModule.addItem({item:'bread',price:0.5});
basketModule.addItem({item:'butter',price:0.3});
console.log(basketModule.getItemCount());
console.log(basketModule.getTotal());
それはどのようにこれは以下のようにそれを書くと異なっているのですか?「のモジュールパターンは 『プライバシー』をカプセル化するパターン、状態及び組織がクロージャを使用して人気のデザインである」という統計単に機能範囲でプライバシーを施行できないのですか?あなたはそれの新しいインスタンスを作成する可能性なしにオブジェクトを作成する最初の変形では
var basketModule = function() {
var basket = []; //private
this.addItem = function(values) {
basket.push(values);
}
this.getItemCount = function() {
return basket.length;
}
this.getTotal = function(){
var q = this.getItemCount(),p=0;
while(q--){
p+= basket[q].price;
}
return p;
}
}
var basket = new basketModule();
basket.addItem({item:'bread',price:0.5});
basket.addItem({item:'butter',price:0.3});
私は私の質問は今推測は、第二のより多くの「モジュール」第一のパターンです。このリンクでは、モジュールパターンの明示的な例として第1の変種を使用しています。 – eirikrl
私は最初のバリエーションが(basketModuleを提供する)モジュールパターンを反映していると言いたいのですが、2番目のバリエーションは 'basket' * instances *を作る方法を提供します。それはすべての方法のラベルの問題です、あなたはまた、 'シングルトンパターン'も最初の変種名前を付けることができます。 – KooiInc
モジュールは、インスタンス化可能なクラスのセットではなく、機能の分離されたパッケージであるという見方からは、そうです。しかし、2つの違いはあまり設計ではなく、構文です。 'var basketModule = new function(){...};'を使うことでシングルトンを2番目の方法にすることを止めることは何もありません。リターンオブジェクトを使用するという考え方は、必要に応じてインターフェイスを数行のコードに集約できるため、一目でわかることができます。しかし、これには大きな無名関数を使用しないでください。単に 'return {publicFunc:privateFunc};'を実行するだけです。 –