关于javascript命名空间的问题

时间:2010-06-04 19:12:02

标签: javascript namespaces

通过在第二个代码片段中直接声明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 }
};

1 个答案:

答案 0 :(得分:11)

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

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)或使用函数创建变量范围(私有变量)在这个例子中)。