使用文字符号的JS对象与命名空间

时间:2015-05-07 16:00:06

标签: javascript

我正在使用Javascript进行在线课程,似乎无法在没有构造函数的情况下找到命名空间和对象之间的任何分离。

例如,下面是bookapce的书籍示例

var MyNamespace = {
    myFunction1: function(someParameters) {
        // Implementation code…
    },
    myFunction2: function(someParameters) {
        // Implementation code…
    },
    message: "Hello World",
    count: 42
}

然后,在这里使用对象文字表示法是对象的例子

var objectName = { 
    property1: value1, 
    property2: value2,  

}; 

从语法上讲,它们看起来几乎完全相同。两者都使用var关键字声明,通常用于全局范围。两者都公开定义成员。对象示例使用行分隔符但是......不确定是否太重要。

使用点表示法也可以访问属性:

MyNamespace.myFunction1
objectName.property1

他们也可以共享相同的公共属性名称。例如,下面的示例为命名空间和对象提供了.property1的适当值。

    var MyNamespace = {
        property1: "nsValue" 
    }
    var objectName = { 
        property1: "objValue" 
    };
    console.log(MyNamespace.property1);
    console.log(objectName.property1);

虽然有一个(好)机会我错过了所有意图和目的,但JavaScript命名空间和使用对象文字符号创建的对象之间没有区别。我错过了什么?

2 个答案:

答案 0 :(得分:2)

Object literal是在JavaScript中实现命名空间概念的方法之一。我相信当你谈到命名空间时,你指的是避免与其他对象和变量冲突的概念。但是,命名空间可以使用其他模式来实现,就像使用IIFE(立即调用函数执行)一样。当你使用jQuery时,最常见的命名空间示例之一就是。通常为了防止$变量的使用冲突,建议您将jQuery变量传递给匿名函数,然后将其分配给$变量。

(function ( $ ) {

    var shade = "#556b2f";

    $.fn.greenify = function() {
        this.css( "color", shade );
        return this;
    };

}( jQuery ));

这基本上确保$变量将始终分配给该函数中的jQuery对象。

答案 1 :(得分:2)

A"命名空间"只是一组对象和功能。对象文字可用于实现命名空间。通常,当以这种方式使用对象时,您将使用与函数构造函数相同的第一个字母大写(正如您在此处使用MyNamespace所做的那样)。如果您的应用程序需要使用全局范围,那么使用这样的命名空间来防止名称冲突(就像jQuery使用$作为命名空间以访问其API的所有方法和属性一样)是一种很好的做法。 / p>