我目前正在做有关Java的Codeacdemy教程,而在做对象教程时,我对以下内容一直不确定:

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

// Now we can make an array of people
var family = [];
family[0] = Person("alice", 40);
family[1] = Person("bob", 42);
family[2] = Person("michelle", 8);
family[3] = Person("timmy", 6);

// loop through our new array
for(var person in family){
    console.log("name: "+person.name);
}


之前我在codecademy上遇到过问题,所以我在自己的网页上尝试了它,但是仍然不确定。谁能向我解释原因。我也尝试过使用family[0].name,这也是未定义的

最佳答案

for-in循环返回索引,而不是值。如果将其更改为console.log("name: "+family[person].name),它将按预期工作。

for(var person in family){
    console.log(person);
    console.log("name: "+person.name);
}
0
name: undefined
1
name: undefined
2
name: undefined
3
name: undefined


正如@basilikum也提到的那样,您需要使用new关键字创建每个人,否则他们将不是对象。

console.log(Person("alice", 40));     // undefined
console.log(new Person("alice", 40)); // Person {name: "alice", age: 40}

10-07 13:33
查看更多