3

我正在使用不同的代码结构方式,并且很难确定创建对象的方式之间的差异。是否有简洁但全面的参考资料来阅读这些内容?

在下面的示例中,我可以以相同的方式引用 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
4

4 回答 4

1

您当前使用的语法是 Object Literal 语法,考虑到您在此处显示的内容,完全可以接受。如果您需要向多个类添加成员函数,您需要阅读Prototypal Inheritance。否则,你做得很好IMO。

于 2011-07-11T20:06:11.787 回答
1

假设您的意思是创建对象文字及其键的不同方法,用引号将键括起来将是最好的方法。有几个原因:

A:如果你想给键起一个长于一个单词、一个符号或其他字符的名称,你必须使用引号。

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:如果需要,总是使用引号几乎意味着它已经准备好 JSON。

于 2011-07-11T20:25:46.850 回答
0

唯一真正的区别是您可以通过这种方式创建无效的符号名称:

var x = { 'some text': { prop1: true } }; // Valid
var x = { some text: { prop1: true } }; // Invalid

您只能通过索引器(又名x['some text'])访问它,但它可以工作。

于 2011-07-11T20:05:14.303 回答
0

使用这种类型的语法声明属性时:

var myObject = {group1 : 'sharepoint'};

只要属性名称不是合法的 javascript 变量名称,您就必须在属性名称周围使用引号。这将包括它包含空格、以数字开头或包含任何其他在 javascript 变量名称中不合法的字符(例如 +-*&^%)。始终包含引号是安全的。如果属性名称是安全的,则不需要引号。

以下是对需要引号的名称类型的一种解释:http: //www.codelifter.com/main/tips/tip_020.shtml。如果您不确定,请加上引号。如果您想保持一致,请始终使用引号或永远不要使用引号,并且永远不要使用不是合法 javascript 变量名的标识符。你的选择。

于 2011-07-11T20:19:44.507 回答