使用数组文字内的构造函数创建对象

时间:2015-08-12 14:28:25

标签: javascript arrays

我正在尝试使用构造函数Person创建一个对象,但是当我直接在使用文字符号的数组中初始化对象时它不起作用。

function Person (name, age) {
    this.name = name;
    this.age = age;
} 

var family = [
    [ new Person("alice", 40)   ],
    [ new Person("bob", 42)     ],
    [ new Person("michelle", 8) ],
    [ new Person("timmy", 6)    ]
];

for (var person in family) {
    console.log(family[person].name);
}

但它只打印undefined四次。

我必须使用这种表示法:

var family = new Array();
family[0] = new Person("alice", 40);
family[1] = new Person("bob", 42);
family[2] = new Person("michelle", 8);
family[3] = new Person("timmy", 6);

因此它会打印alicebobmichelletimmy

我做错了什么?

2 个答案:

答案 0 :(得分:2)

你可以使用它:

var family = [
     new Person("alice", 40),
     new Person("bob", 42),
     new Person("michelle", 8),
     new Person("timmy", 6)    
];

不需要将每个Person括在括号中。

现在您可以循环遍历数组中的项目,如下所示:

for (var index=0; index<family.length; index++) {
    console.log(family[index].name);
}

我没有使用for..in,因为这是出于另一个原因:

  

for..in语句遍历一个的可枚举属性   对象,以任意顺序。对于每个不同的属性,语句都可以   被执行。

有关for...in的详细信息,请查看here

function Person (name, age) {
    this.name = name;
    this.age = age;
} 

var family = [
         new Person("alice", 40),
         new Person("bob", 42),
         new Person("michelle", 8),
         new Person("timmy", 6)    
    ];

for (var index=0; index<family.length; index++) {
    document.write(family[index].name);
    document.write("</br>");
}

答案 1 :(得分:1)

您实际上正在创建一个2D数组 - 我认为您只需要一个常规数组,然后使用常规for循环进行迭代:

var family = [
    new Person("alice", 40), //omit the inner arrays, etc./.
];

for (var i = 0; i < family.length; i++) { 
    //check em out
    console.log(family[i].name);
}