将对象/方法分配给变量或新对象文字

时间:2012-07-13 14:25:15

标签: object variable-assignment javascript

查看Google的书签泡泡库代码,我发现了这个:

var google = google || {};
google.bookmarkbubble = google.bookmarkbubble || {};

有人可以解释他们在这里做的是什么以及他们为什么要这样做?由于JS是一种解释性语言,为什么你需要将相同的google对象分配到google变量?这个脚本不会包含在每次加载页面时只执行一次吗?

3 个答案:

答案 0 :(得分:2)

他们正在设置类似命名空间的对象。如果已有google个对象或google.bookmarkbubble对象,则表示他们确保不替换它。例如,如果您添加了另一个Google库,则可能已经设置了一个google对象,如下所示:

{
    somelibrary: {
        ...
    }
}

所以,如果他们只是:

var google = { bookmarkbubble: { ... } }

这会破坏引用google.somelibrary的任何代码。同样,如果他们没有var google = google || {};并且您没有定义google,那么google.bookmarkbubble会抛出错误。

简而言之,此代码可确保存在google.bookmarkbubble对象,而不会覆盖任何先前定义的googlegoogle.bookmarkbubble个对象。

答案 1 :(得分:1)

var google = google || {};

的简写语法
if (!google) {
  google = {};
}

这可确保第二个赋值不会失败,因为google至少是一个空哈希值。

答案 2 :(得分:0)

当一个库包含许多可能包含或不包含在用户中的文件时,通常会这样做。第一个库将google初始化为空对象(因为它的计算结果为空),后续库将保留已添加到对象的属性。