我正在尝试理解 (揭示)模块模式 中的 公共属性 如何工作。 卡尔·丹利 "揭示模块模式" 指出的一个优点是:
当调用时,它返回
让我们来看一下这个代码(fiddle):明确定义的公共方法和变量,提高可读性
var a = function() {
var _private = null;
var _public = null;
function init() {
_private = 'private';
_public = 'public';
}
function getPrivate() {
return _private;
}
return {
_public : _public,
init : init,
getPrivate : getPrivate,
}
}();
a.init();
console.log( a._public ); // null
console.log( a.getPrivate() ); // "private"
当调用时,它返回
null
。现在我可以操作该公共属性,例如a._public ='public';
,但我无法从我的对象内部更改它。或者至少这些更改不会传递。我有点期望它是"public"
,因为它在init
方法之前被更新了。
这是否意味着我不能有任何处理公共属性的方法?那么,在此模式中使用公共属性就没有什么意义了,对吗?我也尝试过这个但并没有成功(fiddle):
return {
_pubic : _public,
init2 : function() {
_public = 'public';
}
}
最后,我有一个关于整个return
语句的问题。为什么不能只使用return this;
来使所有内容都公开?因为this
应该是自调用函数的上下文,它不应该返回其中的所有内容吗?为什么我必须创建另一个被返回的对象?在这个fiddle中,它返回了window
对象。