заполнить массив экземплярами класса - PullRequest
0 голосов
/ 21 октября 2018

Я застреваю, заполняя массив экземпляров классов.Чтобы сделать длинную историю очень короткой, я создаю классную личность (с атрибутами и функциями на ней), и я хотел бы заполнить массив экземпляров человека, просто вставив массив «новый» экземпляр класса этого человека.В результате массив заполняется многими элементами, указывающими на последний созданный экземпляр.

Вот упрощенный пример кода.https://repl.it/@expovin/ArrayOfClassInstances

let p={
  name:"",
  age:""
}

class Person {

  constructor(name, age){
    p.name=name;
    p.age=age;
  }

  greeting(){
    console.log("Hi, I'm ",p);
  }

  gatOler(){
    p.age++;
  }
}

module.exports = Person;

Используется так:

let person = require("./Person");

var crowd = [];


console.log("Let's create an instance of Person in the crowd array");
crowd.push(new person("Vinc", 40));
console.log("Instance a is greeting");
crowd[0].greeting();

console.log("Let's add a new instance of Person as next element in the same array");
crowd.push(new person("Jack", 50));
crowd[1].greeting();

console.log("I expect to have two different people in the array");
crowd.forEach( p => p.greeting());

Где моя вина?

Заранее спасибо за помощь

1 Ответ

0 голосов
/ 21 октября 2018

У вас есть переменная, которая не относится к классу, она сбрасывается каждый раз, когда вы создаете новый экземпляр лица.Вместо этого сделайте его свойством класса person, чтобы оно выглядело так:

class Person {

  constructor(name, age){
    this.p = {
      name, age
    }
  }

  greeting(){
    console.log("Hi, I'm ", this.p);
  }
}

Вы также можете разделить их на их собственные переменные:

class Person {

  constructor(name, age){
    this.name = name;
    this.age = age;
  }

  greeting(){
    console.log("Hi, I'm ", this.name, this.age);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...