Javascript 使用文字符号的JS对象和名称空间有什么区别

Javascript 使用文字符号的JS对象和名称空间有什么区别,javascript,Javascript,我正在学习一个关于Javascript的在线类,在没有构造函数的情况下,似乎找不到名称空间和对象之间的任何分离 例如,下面是这本书的一个命名示例 var MyNamespace = { myFunction1: function(someParameters) { // Implementation code… }, myFunction2: function(someParameters) { // Implementation code

我正在学习一个关于Javascript的在线类,在没有构造函数的情况下,似乎找不到名称空间和对象之间的任何分离

例如,下面是这本书的一个命名示例

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名称空间和使用对象文字符号创建的对象之间没有区别。我缺少什么?

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

(function ( $ ) {

    var shade = "#556b2f";

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

}( jQuery ));

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

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

(function ( $ ) {

    var shade = "#556b2f";

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

}( jQuery ));

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

名称空间只是一组对象和函数。对象文字可用于实现命名空间。按照惯例,当以这种方式使用对象时,第一个字母的大写形式与函数构造函数的大写形式相同(正如您在这里对MyNamespace所做的那样)。如果您的应用程序需要使用全局作用域,最好使用这样的名称空间来防止名称冲突(就像jQuery使用$作为名称空间来访问其API的所有方法和属性一样)。

名称空间只是一组对象和函数。对象文字可用于实现命名空间。按照惯例,当以这种方式使用对象时,第一个字母的大写形式与函数构造函数的大写形式相同(正如您在这里对MyNamespace所做的那样)。如果你的应用程序需要使用全局作用域,那么最好使用这样的名称空间来防止名称冲突(就像jQuery使用$作为名称空间来访问其API的所有方法和属性)。

它们都是对象文本,而且都是相同的,我想有人刚刚决定给第一个名称更奇特?是的,这里没有区别。也许在本书中,他们可以将其中一个转换为基于函数的对象,以及局部范围等。继续阅读!JavaScript中没有名称空间。这本书演示的技术只是使用单个全局对象来保存本来是全局的变量。对象被用作名称空间,就像它们被用作查找表、记录等。它们都是对象文本,并且是相同的,我想有人刚刚决定给第一个对象取一个更奇特的名称?是的,这里没有区别。也许在本书中,他们可以将其中一个转换为基于函数的对象,以及局部范围等。继续阅读!JavaScript中没有名称空间。这本书演示的技术只是使用单个全局对象来保存本来是全局的变量。对象被用作名称空间,就像它们被用作查找表、记录等一样。