了解创建JavaScript对象的不同方法

时间:2011-07-11 20:01:21

标签: javascript javascript-objects

我正在搞乱构建代码的不同方法,我很难确定创建对象的方法之间的差异。是否有一个简明但全面的参考资料来阅读这些内容?

在下面的例子中,我可以用同样的方式引用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 个答案:

答案 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变量名称的标识符。你的选择。