Javascript 使用文字符号的JS对象和名称空间有什么区别
我正在学习一个关于Javascript的在线类,在没有构造函数的情况下,似乎找不到名称空间和对象之间的任何分离 例如,下面是这本书的一个命名示例Javascript 使用文字符号的JS对象和名称空间有什么区别,javascript,Javascript,我正在学习一个关于Javascript的在线类,在没有构造函数的情况下,似乎找不到名称空间和对象之间的任何分离 例如,下面是这本书的一个命名示例 var MyNamespace = { myFunction1: function(someParameters) { // Implementation code… }, myFunction2: function(someParameters) { // Implementation code
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中没有名称空间。这本书演示的技术只是使用单个全局对象来保存本来是全局的变量。对象被用作名称空间,就像它们被用作查找表、记录等一样。