gpt4 book ai didi

javascript - 封装在javascript模块模式中

转载 作者:搜寻专家 更新时间:2023-11-01 04:19:29 27 4
gpt4 key购买 nike

我正在阅读此链接 http://addyosmani.com/largescalejavascript/#modpattern

又看到了下面的例子。

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});

最佳答案

在第一个变体中,您创建了一个对象,但不可能创建它的新实例(它是一个立即实例化的函数)。第二个例子是一个完整的构造函数,允许多个实例。两个示例中的封装相同,basket 数组在两个示例中都是“私有(private)”的。

只是为了好玩:两全其美可能是:

var basketModule = (function() {
function Basket(){
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;
}
}
return {
basket: function(){return new Basket;}
}
}());
//usage
var basket1 = basketModule.basket(),
basket2 = basketModule.basket(),

关于javascript - 封装在javascript模块模式中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10362956/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com