【发布时间】:2012-03-24 06:20:21
【问题描述】:
我正在阅读有关跨具有相同模块的文件的 javascript 中的私有状态维护。
假设我们有 file1:
var Module = (function(){
//Some private variables declared.
// and initialized.
})();
我们有文件2:
var Module = (function(myModule){
//Here the same private variables are required.
// And the following implementation enables it.
var _private = myModule._private = myModule._private || {},
_seal = myModule._seal = myModule._seal || function () {
delete myModule._private;
delete myModule._seal;
delete myModule._unseal;
},
_unseal = myModule._unseal = myModule._unseal || function () {
myModule._private = _private;
myModule._seal = _seal;
myModule._unseal = _unseal;
};
return myModule;
}(Module || {}));
我无法理解的部分是var _private = myModule._private = myModule._private || {},
我认为var _private = myModule._private || {} 会做同样的事情。为什么要按照上面提到的方式完成?此外,deleting myModule._private, myModule._seal and myModule._unseal 不会使其无法进一步使用吗?但是文章说它通过维护模块的私有状态来密封和解封私有变量以供在其他文件中使用。有关此模式的任何提示或见解?
我指的文章是this
【问题讨论】:
-
你的第二个 sn-p 没有返回任何东西。我不确定你为什么要用
undefined覆盖Module。 -
@pimvdb:这是我的错误。我确实返回了 myModule
标签: javascript oop design-patterns access-modifiers private-members