Javascript ES6类扩展另一个类并多次调用super?
我有一个一流的球员,我想把它扩展成一个一流的球队 我的逻辑是:Javascript ES6类扩展另一个类并多次调用super?,javascript,ecmascript-6,Javascript,Ecmascript 6,我有一个一流的球员,我想把它扩展成一个一流的球队 我的逻辑是: class Player { constructor(name, age) { //class constructor this.name = name; this.age = age; } sayName() { //class method console.log('Hi, I am ', this.name + '.'); } sayAge() { console.log(
class Player {
constructor(name, age) { //class constructor
this.name = name;
this.age = age;
}
sayName() { //class method
console.log('Hi, I am ', this.name + '.');
}
sayAge() {
console.log('Hi, I am ', this.age + '.');
}
}
class Team extends Player {
constructor(members) {
var players = [];
for (var i = 0; i < members; i++) {
players.push(super(members[i].name, members[i].age));
}
this.players = players; // to not call "this" before super
}
teamNames() {
console.log(this.players);
}
}
let p = new Player('John', 25);
p.sayName(); // John
var team = [{
name: 'Jonh',
age: 25
},{
name: 'Anna',
age: 27
}];
var A_Team = new Team(team);
A_Team.temNames();
职业玩家{
构造函数(名称、年龄){//类构造函数
this.name=名称;
这个。年龄=年龄;
}
sayName(){//class方法
log('你好,我是',this.name+');
}
sayAge(){
log('Hi,我是',this.age+');
}
}
班队队员{
建造师(成员){
var=[];
对于(变量i=0;i
小提琴:
但是这会产生错误,并且类不起作用。我知道在循环中调用
super
是错误的,但这里的解决方案是什么?这两个类之间的关系是否不是“扩展”情况,我是否应该为此使用/声明分离类而不进行扩展?这不是超类-子类情况
如果您有一个类X,并且您想要创建一个特殊的、增强的X版本,那么您应该对它进行扩展/子类化。你的情况不是这样的;您只需使用Player
类组成Team
类即可
class Player {
constructor(name, age, team) { //class constructor
this.name = name;
this.age = age;
this.team = team;
}
sayName() { //class method
console.log('Hi, I am ', this.name + '.');
}
sayAge() {
console.log('Hi, I am ', this.age + '.');
}
}
class Team {
constructor(members) {
this.players = [];
for (var i = 0; i < members; i++) {
this.players.push(new Player(members[i].name, members[i].age, this));
}
}
teamNames() {
console.log(this.players);
}
}
职业玩家{
构造函数(姓名、年龄、团队){//类构造函数
this.name=名称;
这个。年龄=年龄;
这个团队=团队;
}
sayName(){//class方法
log('你好,我是',this.name+');
}
sayAge(){
log('Hi,我是',this.age+');
}
}
班队{
建造师(成员){
这个.players=[];
对于(变量i=0;i
如果您想让玩家有权访问
Team
方法或常量,您必须给Player
实例一个对其父Team
实例的引用,并将其称为Team.teamMethod()
Team和Player之间的关系肯定不是继承
团队不是球员的特例,而是由球员组成的团队
正确的做法是声明单独的类。你有两种方法来实现它,这取决于你是如何使用它的
- 团队在构造函数的参数中获取玩家数组-这在大多数情况下都很好
- 团队被创建为“空”,然后设置玩家。也许团队可以根据一些参数创建该玩家的实例(createPlayer(姓名、年龄)
这是你们问题的最后一部分,为什么你们的代码不起作用 当您调用super时,您正在调用父对象的构造函数 parant对象只有一个,super不返回指向它的指针(而是返回未定义的),因此不能将其推送到数组中 您的代码中也有一些拼写错误 编辑
我正在写答案,同时并没有注意到另一个答案:是的,我不明白球队是如何扩展球员的。难道这支球队不会有一个球员的集合,而不是扩大它吗?就像我认为可能有一些类似于你所拥有的东西会起作用,但我认为这没有意义。如果您已经有了一个玩家类,只需创建一个玩家对象数组。@azium是的,它将是一个集合。但我想在每个球员身上都有一些可以在球队中使用的方法。但也许这只是调用所有收集方法并将它们分开的一种情况当然,您仍然可以调用集合项上的Player方法,因为它们将是Player的实例。请参阅,如果您的团队是Player,那么它应该能够
sayName
和sayAge
。如何实现这一点还不太清楚;您必须定义自己的实现。