类实例的Javascript数组

类实例的Javascript数组,javascript,class,object,Javascript,Class,Object,在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的所

在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
的所有实例的数组


我知道我可以用
播放器手动执行此操作;但我正在寻找一种自动完成的方法。有内置的功能吗?我应该使用循环吗?

在创建新实例时,通过将类更改为:

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

要使用静态数量的
Player
对象初始化数组,可以在数组中调用
newplayer()

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)));

您可以为玩家创建一个容器类。这将允许容器创建和管理玩家。
Players
类可以公开一个接口,使其易于单独或作为一个整体与玩家交互。像这样的东西可能是一个好的开始,可以用更多的功能或不同的组织来填充:

//单个玩家。保存一个玩家的属性和行为
职业选手{
建造师(姓名){
this.name=名称;
}
play(){
console.log(this.name,“plays”)
}
}
//类,该类保存组的参与者、属性和函数的集合
职业选手{
构造函数(){
this.players=[]
}
//创建一个新播放器并将其保存在收藏中
新玩家(姓名){
设p=新玩家(姓名)
这个。玩家。推(p)
返回p
}
获取所有玩家(){
把这个还给我
}
//对于Simplici,这可能包括平均分数等汇总统计数据,目前仅统计
获取numberOfPlayers(){
返回这个.players.length
}
}
让联盟=新球员
联盟新球员(“马克”)
联盟新球员(“罗杰”)
//列出所有的球员
console.log(league.numberOfPlayers+“Players”)
控制台日志(联盟所有玩家)
//让他们做点什么

league.allPlayers.forEach(player=>player.play())
目前我无法评论您的答案,因此这里有一个补充:

class player {
    constructor(name){
        this.name = name;
        PLAYERS.push(this);
    }
}
请注意,在这几行代码中有很多糟糕的做法,你不应该将构造函数绑定到一个变量上,这个变量可能在其他地方初始化,也可能不在其他地方初始化,用任何外部的东西来干扰构造函数都是非常糟糕的。另外,类通常是以标题为大小写的


另外,作为旁注,虽然您可以在维护引用的同时更改consts属性,这样您就可以在声明为const的数组中推送对象,但它实际上并不是自文档代码,因此,如果您要修改此数组,只需使用“let”来声明它“从一开始。

不错。但是如果我有两个参数来创建一个新的
播放器
?语法是否为
const playerDetail=[('param1,param2'),…]
?是的,您可以做
[新玩家('param1','param2')]
谢谢您的关注。我将Const改为Let。你的意思是在构造函数中编写的代码不超过对象属性吗?构造函数应该只与它们正在“构造”的内容相关,所以当你加入一个可能相关也可能不相关的变量时,你基本上放弃了一组功能,比如在没有玩家常量的情况下导出这个类。此外,作为一种良好实践,代码应该尽可能具有声明性(意味着您应该能够理解代码在做什么,而不必揭示实现),并且当您实例化一个对象时,您希望实例化一个对象,而不是将该对象推到一个不相关的数组中。是的,避免构造器中不相关的副作用为什么在newPlayer上使用return?嘿@Shahriar很好,我想把播放器放在那里,但返回了推送的结果——我编辑了它来解决这个问题。这将允许您使用
let aPlayer=league.newPlayer(“SomePlayer”)
并获得新玩家的参考,这非常方便。现在@MarkMeyer:)我非常喜欢您解决这个问题的方法(整个问题)。