Javascript Массив Экземпляров класса - PullRequest
0 голосов
/ 18 сентября 2018

В JS у меня есть класс с именем player, который:

class player {
    constructor(name) {
        this.name = name;
    }
}

и у меня есть два экземпляра, называемые PL1 и PL2:

const PL1 = new player ('pl1name');
const PL2 = new player ('pl2name');

У меня также есть массив с именем PLAYERS:

let PLAYRES = [];

Теперь вопрос в том, как мне создать массив со всеми экземплярами класса player?

Я знаю, что могу сделать это вручную с помощью PLAYERS.push(PL n ); но я ищу способ сделать это как-то автоматически. Есть ли встроенная функция? Должен ли я использовать цикл?

Ответы [ 5 ]

0 голосов
/ 18 сентября 2018

Вы можете использовать переменную (objectArrays) с классом:

class player {
    constructor(name) {
        this.name = name;
        objectArrays.push(this); 
    }

}
objectArrays = [];
0 голосов
/ 18 сентября 2018

Я не могу прокомментировать ваш ответ на данный момент, поэтому вот дополнение:

class player {
    constructor(name){
        this.name = name;
        PLAYERS.push(this);
    }
}

ПОЖАЛУЙСТА: имейте в виду, что в этих нескольких строках есть много ужасных практик, вы не должны связывать конструктор с переменной, которая может или не может быть инициализирована где-то еще, вмешиваясь в конструктор с тем, что внешнее просто ужасно. Также классы обычно имеют титульный регистр.

Плюс в качестве примечания, хотя реально, что вы можете изменять свойства consts при сохранении ссылки, поэтому вы можете помещать объекты в массив, объявленный как const, на самом деле он не складывается как самодокументируемый код, поэтому, если вы собираетесь изменить этот массив, просто объявите его с помощью «let» с самого начала.

0 голосов
/ 18 сентября 2018

Чтобы инициализировать массив со статическим количеством Player объектов, вы можете вызвать new Player() в массиве:

const players = [new Player('name1'), new Player('name2'), new Player('name3')];

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

const playerNames = ['name1', 'name2', 'name3'];
let players = [];
playerNames.forEach((playerName) => players.push(new Player(playerName)));
0 голосов
/ 18 сентября 2018

Вы можете создать класс, который является контейнерным классом для игроков.Это позволит контейнеру создавать игроков и управлять ими.Класс Players может предоставлять интерфейс, позволяющий легко взаимодействовать с игроками по отдельности или в целом.Нечто подобное могло бы стать хорошим началом и могло бы быть наполнено большей функциональностью или другой организацией:

// An individual player. Holds properties and behavior for one player
class Player {
  constructor(name) {
      this.name = name;
  }
  play() {
    console.log(this.name, "plays")
  }
}

// Class that holds a collection of players and properties and functions for the group
class Players {
  constructor(){
    this.players = []
  }
  // create a new player and save it in the collection
  newPlayer(name){
    let p = new Player(name)
    this.players.push(p)
    return p
  }
  get allPlayers(){
    return this.players
  }
  // this could include summary stats like average score, etc. For simplicy, just the count for now
  get numberOfPlayers(){
      return this.players.length
  }
}

let league = new Players()
league.newPlayer("Mark")
league.newPlayer("Roger")

// list all the players
console.log(league.numberOfPlayers + " Players)
console.log(league.allPlayers)


// make them do something
league.allPlayers.forEach(player => player.play())
0 голосов
/ 18 сентября 2018

Я нашел ответ для этого при создании нового экземпляра, изменив мой класс на:

class player {
    constructor(name){
        this.name = name;
        PLAYERS.push(this);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...