添加proto但保留对象结构,javascript

添加proto但保留对象结构,javascript,javascript,prototype,Javascript,Prototype,假设我从一个API中得到: var _persons = [ { name: 'John' }, { name: 'Sarah' } ]; 现在我想添加一个问候功能。我想保存memoryspace,因此我创建了一个个人“类”,并将该函数添加为proto function Person(person){ this.person = person; } Person.prototype.greeting = function(){ return 'hell

假设我从一个API中得到:

var _persons = [
  {
    name: 'John'
  },
  {
    name: 'Sarah'
  }
];
现在我想添加一个问候功能。我想保存memoryspace,因此我创建了一个
个人“类”
,并将该函数添加为proto

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正常工作


循环遍历对象参数中的所有键,并将它们分配给

function Person(person){
    for (var key in person) {
      this[key] = person[key];
    }
}
var persons=[];
功能创建人(人){

对于(var i=0;i要避免对象中出现
.person
,需要将源普通对象的每个属性直接复制到
person
对象中:

function Person(p) {
    this.name = p.name;
    ...
}
[如果有大量键,则使用循环]

然后,命名参数与在
createPersons
函数中迭代的变量不匹配。此外,让该函数
返回列表,而不是设置外部作用域的变量更有意义:

function createPersons(people) {
    return people.map(function(p) {
        return new Person(p);
    });
}

var persons = createPersons(_persons);

注意:上面使用了
Array.prototype.map
,这是通过回调从源数组生成新数组的规范函数。

您正在创建一个
Person
对象,该对象被赋予一个变量
Person
。您需要通过替换

var person = new Person(people[i]);

var\u个人=[
{
名字:“约翰”
},
{
名字:“莎拉”
}
];
职能人员(人){
这个人=人;
}
Person.prototype.greeting=函数(){
返回“hello”+this.person.name;
};
var人员=[];
功能创建人(人){

对于(var i=0;i您正在使用
people
作为传递的参数名,但正在迭代
\u peoples
。。。
function createPersons(people) {
    return people.map(function(p) {
        return new Person(p);
    });
}

var persons = createPersons(_persons);
var person = new Person(people[i]);
var person = new Person(people[i]).person;