【问题标题】:Question about javascript namespaces关于javascript命名空间的问题
【发布时间】:2010-06-04 19:12:02
【问题描述】:

当您可以通过在第二个代码 sn-p 中直接声明 NS 来完成相同的事情时,以下示例中返回方法的意义何在?

1:

var NS = function() {
    return {
        method_1 : function() {
            // do stuff here
        },
        method_2 : function() {
            // do stuff here
        }
    };
}();

2:

var NS = {
    method_1 : function() { do stuff },
    method_2 : function() { do stuff }
};

【问题讨论】:

    标签: javascript namespaces


    【解决方案1】:

    在您的特定示例中没有优势。但是你可以使用第一个版本来隐藏一些变量:

    var NS = function() {
        var private = 0;
        return {
            method_1 : function() {
                // do stuff here
                private += 1;
            },
            method_2 : function() {
                // do stuff here
                return private;
            }
        };
    }();
    

    这在 Douglas Crockford 的“JavaScript: The Good Parts”中被称为模块。如果您搜索网络,您应该能够找到完整的解释。

    基本上,在 Javascript 中创建新变量范围的唯一东西是函数,因此大多数全局消除都围绕使用对象的属性(在本例中为 NS)或使用函数创建变量范围(私有 var在这个例子中)。

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 2011-06-03
      相关资源
      最近更新 更多