了解在 JavaScript 的模块模式中命名返回对象的好处
Understanding the benefit of naming a returned object in the module pattern in JavaScript
我从文体上理解为什么要命名返回的对象,用于组织等。但是,我不明白添加或删除方法的好处或在运行时更新属性的能力。
var foo = (function(){
var publicAPI = {
bar: function(){
publicAPI.baz();
},
baz: function(){
console.log("baz");
}
};
return publicAPI;
})();
我认为这是为了在出现错误时获得更好的调用堆栈。
例如,如果您将 console.log
更改为 console.blog
那么您将收到如下错误:
Uncaught TypeError: console.blog is not a function(…)
publicAPI.baz @ VM167:8
(anonymous function) @ VM241:2
...
这里你马上就看出问题出在publicAPI.baz
.
通常,public api 可以访问闭包内的变量,并且是访问值的唯一方式。
你上面的例子是多余的,因为 api 只能访问返回的对象,但是如果你添加另一个只有 publicAPI 可以访问的变量,那么你就创建了隐私。
var foo = (function(){
//private
var _foo = {name: 'Foo'};
var publicAPI = {
getName: function(){
return _foo.name;
},
setName: function(name){
_foo.name = name;
},
};
return publicAPI;
})();
我从文体上理解为什么要命名返回的对象,用于组织等。但是,我不明白添加或删除方法的好处或在运行时更新属性的能力。
var foo = (function(){
var publicAPI = {
bar: function(){
publicAPI.baz();
},
baz: function(){
console.log("baz");
}
};
return publicAPI;
})();
我认为这是为了在出现错误时获得更好的调用堆栈。
例如,如果您将 console.log
更改为 console.blog
那么您将收到如下错误:
Uncaught TypeError: console.blog is not a function(…)
publicAPI.baz @ VM167:8
(anonymous function) @ VM241:2
...
这里你马上就看出问题出在publicAPI.baz
.
通常,public api 可以访问闭包内的变量,并且是访问值的唯一方式。
你上面的例子是多余的,因为 api 只能访问返回的对象,但是如果你添加另一个只有 publicAPI 可以访问的变量,那么你就创建了隐私。
var foo = (function(){
//private
var _foo = {name: 'Foo'};
var publicAPI = {
getName: function(){
return _foo.name;
},
setName: function(name){
_foo.name = name;
},
};
return publicAPI;
})();