维护私人国家

时间:2012-03-06 18:03:38

标签: javascript oop design-patterns access-modifiers private-members

我正在阅读有关具有相同模块的文件的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

1 个答案:

答案 0 :(得分:1)

一开始,myModule._private可能未定义。如果是这样,var _private = myModule._private || {}将始终将_private设置为{}并保持myModule._private未定义(导致删除未定义的内容),而较长的代码将myModule._private设置为{}如果未定义并保持不变其他情况,然后执行_private = myModule._private;

所有这些意大利面只是为了安全delete myModule._private