我正在阅读有关具有相同模块的文件的javascript中的私有状态维护。
假设我们有file1:
var Module = (function(){
//Some private variables declared.
// and initialized.
})();
我们有file2:
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
答案 0 :(得分:1)
一开始,myModule._private
可能未定义。如果是这样,var _private = myModule._private || {}
将始终将_private设置为{}并保持myModule._private未定义(导致删除未定义的内容),而较长的代码将myModule._private设置为{}如果未定义并保持不变其他情况,然后执行_private = myModule._private;
所有这些意大利面只是为了安全delete myModule._private
。