Tôi đã đọc liên kết này http://addyosmani.com/largescalejavascript/#modpatternđóng gói trong mô hình mô-đun javascript
Và xem ví dụ sau.
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());
Nó stats rằng "Các mô hình mô-đun là một thiết kế phổ biến mà mô hình đó gói gọn 'riêng tư', nhà nước và tổ chức sử dụng đóng cửa" Làm thế này là khác nhau từ viết nó như dưới đây? Không thể riêng tư được thực thi đơn giản với phạm vi chức năng?
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});
Tôi đoán câu hỏi của tôi hiện đang là mô hình đầu tiên hơn "module" hơn so với thứ hai. Liên kết sử dụng biến thể đầu tiên làm ví dụ rõ ràng về mẫu mô-đun. – eirikrl
Tôi muốn nói biến thể đầu tiên phản ánh mẫu mô-đun (phân phối 'rổModule'), biến thể thứ hai cung cấp cách tạo các trường hợp' rổ' * *. Đó là tất cả các vấn đề ghi nhãn bằng cách này, bạn có thể đặt tên biến thể đầu tiên cũng là 'mẫu đơn'. – KooiInc
Từ quan điểm cho rằng một mô-đun là một gói chức năng riêng biệt hơn là một tập hợp các lớp instantiatable, sau đó có. Tuy nhiên sự khác biệt giữa hai thiết kế không quá nhiều, đó là cú pháp. Không có gì ngăn cản bạn có một singleton cách thứ hai bằng cách có 'var basketModule = new function() {...};'. Ý tưởng sử dụng một đối tượng trả về là bạn có thể ngưng tụ giao diện thành một vài dòng mã nếu bạn thích, vì vậy bạn có thể nhìn thấy nó trong nháy mắt. Nhưng bạn sẽ không sử dụng các hàm ẩn danh lớn cho điều này, bạn sẽ chỉ làm 'return {publicFunc: privateFunc};'. –