我正在搞乱构建代码的不同方法,我很难确定创建对象的方法之间的差异。是否有一个简明但全面的参考资料来阅读这些内容?
在下面的例子中,我可以用同样的方式引用subclass1和subclass2,它们看起来行为相同。但我知道JS中的所有内容都是有原因的。有什么区别,什么时候我应该使用一种风格而不是另一种?
非常感谢!
var ParentObj = {
'subclass1' : {
group1 : {
'property1' : 'val1',
'property2' : true,
'property3' : 'val3'
},
group2 : {
'property1' : 'val1',
'property2' : true,
'property3' : 'val3'
}
} //end first subclass
subclass2 : {
group1 : 'sharepoint',
specialstuff: {
specprop1: ["some settings", "some more settings", "lots of settings", "maybe a switch", "etc etc etc"],
specprop2 : 'some plain text message'
}
}
}; //end ParentObj
答案 0 :(得分:1)
您当前使用的语法是Object Literal语法,并且根据您在此处显示的内容完全可以接受。如果您到达需要将成员函数添加到多个类的位置,则需要阅读Prototypal Inheritance。否则,你做得很好IMO。
答案 1 :(得分:1)
假设您指的是创建对象字面值及其键的不同方法,那么用引号括起键将是最好的方法。原因有很多:
答:如果您想给密钥的名称长于一个单词,一个符号或其他字符,则必须使用引号。
var obj = {"some name": 1337, "¤": "š"};
alert(obj["some name")); // Shows "1337"
alert(obj["¤"]); // Shows "š"
B:使用引号可以使用保留字。如果没有它们,如果密钥的名称是保留字,则密钥可能无法访问。
var obj = {"class": 10}; // "Class" is a reserved word
alert(obj["class"]); // Shows "10"
// Using "obj.class" might give unexpected errors in some browsers
C:如果需要的话,总是使用引号几乎意味着它已经准备就绪。
答案 2 :(得分:0)
唯一真正的区别在于您可以通过以下方式创建无效的符号名称:
var x = { 'some text': { prop1: true } }; // Valid
var x = { some text: { prop1: true } }; // Invalid
您只能通过索引器(又名x['some text']
)访问它,但它可以正常工作。
答案 3 :(得分:0)
使用此类语法声明属性时:
var myObject = {group1 : 'sharepoint'};
只要不是合法的javascript变量名,就必须在属性名称周围使用引号。这将包括任何时候它包含一个空格,以数字开头或包含任何其他在javascript变量名称中不合法的字符(例如+ - *& ^%)。始终包含引号是安全的。如果属性名称是安全的,则不需要引号。
以下是对哪些类型的名称需要引号的一种解释:http://www.codelifter.com/main/tips/tip_020.shtml。如果您不确定,请将引号括起来。如果您想保持一致,请始终使用引号或从不使用引号,并且永远不要使用非合法的javascript变量名称的标识符。你的选择。