var something = somethingElse.obj = somethingElse.obj || {} - 这是用来做什么的?

时间:2010-12-06 16:12:37

标签: javascript language-features

对于奇怪的标题感到抱歉...不知道如何查询这样的语言功能。

当我遇到这个代码时遇到这个例子时,我正在阅读module patterns。它发生在示例模块模式的闭包中,用于在“松散地扩充”模块时在不同文件之间维护私有状态。

编辑 - 包括模块代码的其余部分

var MODULE = (function (my) { 
    var _private = my._private = my._private || {}, 
        _seal = my._seal = my._seal || function () { 
            delete my._private; 
            delete my._seal; 
            delete my._unseal; 
        }, 
        _unseal = my._unseal = my._unseal || function () { 
            my._private = _private; 
            my._seal = _seal; 
            my._unseal = _unseal; 
        }; 

    // permanent access to _private, _seal, and _unseal 

    return my; 
}(MODULE || {}));

我试图将其分解,但它并没有加起来。

我开始从右到左看着它。现在,我已经看到了var someVar = something || somethingElse beore,我只能假设没有设置(falsenull等)它将它作为布尔表达式计算并设置为另一个值(请确认)

这就是我迷路的地方。我只能假设设置my._private的目的是将它设置为空对象(如果它不存在)......但这只是猜想。

在这里设置my._private的目的是什么?

3 个答案:

答案 0 :(得分:2)

请记住,Javascript中的每个语句都会计算为一个值,甚至是一个赋值(它的计算结果为已分配的值)。

foo = bar = 3;

相同
foo = (bar = 3);

相同
bar = 3;
foo = 3;

在您的情况下,my._private如果当前为假值,则设置为{},然后该值也会分配给本地_private变量

答案 1 :(得分:0)

你猜想是对的,这个:

var _private = my._private = my._private || {};

如果my._private存在,则会将其分配给新的_private变量。

如果,则将my._private设置为新的空对象,并将新的_private变量设置为相同的引用。


为什么设置它?据推测,由于某种原因,它稍后会被使用......但是如果没有看到剩下的代码,我就无法肯定地说。

答案 2 :(得分:0)

他们是否在模块内的任何其他地方使用它?如果没有,那就没有目的。它可以作为var _private = my._private || {};

完成