假设我从API中获取此信息:
var _persons = [
{
name: 'John'
},
{
name: 'Sarah'
}
];
现在我想添加一个问候语功能。我想保存memoryspace,所以我创建了一个Person 'class'
并将该函数添加为原型。
function Person(person){
this.person = person;
}
Person.prototype.greeting = function(){
return 'hello ' + this.person.name
};
我实例化每个人:
var persons = [];
function createPersons(people){
for(var i = 0;i<people.length;i++){
var person = new Person(people[i]);
persons.push(person);
}
};
createPersons(_persons);
问题是:
console.log(persons[0].name) //undefined
console.log(persons[0].person.name) //'John'
无论如何我可以让第一个console.log工作吗?
答案 0 :(得分:0)
遍历对象参数中的所有键,并将它们分配给this
function Person(person){
for (var key in person) {
this[key] = person[key];
}
}
答案 1 :(得分:0)
var persons = [];
function createPersons(people){
for(var i = 0;i<people.length;i++){
var person = new Person(people[i]);
persons.push(person);
}
};
createPersons(_persons);
应该将人们用作变量
答案 2 :(得分:0)
要避免在对象中出现.person
,您需要将源普通对象的每个属性直接复制到Person
对象中:
function Person(p) {
this.name = p.name;
...
}
[如果有大量按键,则使用循环]
然后,您在命名参数和您在createPersons
函数中迭代的变量之间存在不匹配。此外,将该函数return
放在列表中更有意义,而不是设置外部范围的变量:
function createPersons(people) {
return people.map(function(p) {
return new Person(p);
});
}
var persons = createPersons(_persons);
注意:以上使用Array.prototype.map
,它是通过回调从源数组生成新数组的规范函数。
答案 3 :(得分:0)
您正在创建一个赋予变量Person
的{{1}}对象。您需要通过替换
person
与
var person = new Person(people[i]);
var person = new Person(people[i]).person;