【问题标题】:I have some questions about javascript namespace我对 javascript 命名空间有一些疑问
【发布时间】:2014-01-28 07:59:48
【问题描述】:

我遇到了一些 Javascript 命名空间定义。我有点困惑。

下面的命名空间定义正确吗?

 var googletag = googletag || {};

所以当你在最后添加一个方括号时,这是什么意思?

 googletag.cmd = googletag.cmd || [];

如果你在命名空间之后定义了一个函数,这意味着什么?

var ctvAdManager = ctvAdManager || {};

(function () {
    var gads = document.createElement('script');
    gads.async = true;
    gads.type = 'text/javascript';
    var useSSL = 'https:' == document.location.protocol;
    gads.src = (useSSL ? 'https:' : 'http:') +
        '//www.googletagservices.com/tag/js/gpt.js';
    var node = document.getElementsByTagName('script')[0];
    node.parentNode.insertBefore(gads, node);
})();

请指教

【问题讨论】:

标签: javascript javascript-namespaces


【解决方案1】:

[]{} 仅使用数组与对象作为命名空间。前者通常会奏效,但几乎总是错误的;它使用 Array 原型属性污染了命名空间。 ({} 对 Object 原型属性做同样的事情,但这些属性要少得多——而且它们不太可能有理想的名称。)

【讨论】:

    【解决方案2】:

    这是OR 符号的简写。英文

    var googletag = googletag || {};
    

    意思是:“设置googletag等于googletag,但是如果没有定义,设置googletag为一个空对象。

    []也一样,只是一个空数组而不是一个对象。

    你使用的函数符号

    (function() { ... })(); is called an `Immediately Invoked Function Expression`.
    

    我发现这个网站解释得很好。 http://benalman.com/news/2010/11/immediately-invoked-function-expression/

    【讨论】:

      【解决方案3】:

      为了回答您的第二个问题,括号中的这个函数是一个自执行函数。你可以阅读它here

      【讨论】:

        【解决方案4】:

        var googletag = googletag || {}; 将获得googletag 的值,或者,如果googletag 未定义,它将采用一个空对象。

        与第二个相同,但不是一个对象,而是回退到一个空数组。

        对于函数:
        var foo = 5;
        foo == 5 && doSomething(); // is the same thing as if (foo == 5) doSomething(); foo == 5 || doSomething(); // is the same thing as if (foo != 5) doSomething();

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-18
          • 1970-01-01
          • 2019-06-01
          • 2020-08-14
          相关资源
          最近更新 更多