Javascript JS类子类在访问父构造函数时返回未定义

Javascript JS类子类在访问父构造函数时返回未定义,javascript,class,constructor,Javascript,Class,Constructor,在子类中调用rnd.winner()时,我得到了未定义的值。这应该从父级(如JOHN)返回玩家的名称。从子级调用测试函数将从父级返回正确的win()。在child中调用super.constructor.name作为返回状态返回父类名称->player为什么 职业玩家{ 建造师(姓名){ this.name=名称; 这是0.win=0; 这1.0损失=0; }; 赢(){ 把这个还给我; }; 损失(){ 退还此项损失; }; }; 班级记分牌延伸球员{ 建造师(轮){ 超级(); 这个圆=圆

在子类中调用
rnd.winner()
时,我得到了未定义的值。这应该从父级(如JOHN)返回玩家的名称。从子级调用测试函数将从父级返回正确的
win()
。在child中调用
super.constructor.name
作为返回状态返回父类名称->
player
为什么

职业玩家{
建造师(姓名){
this.name=名称;
这是0.win=0;
这1.0损失=0;
};
赢(){
把这个还给我;
};
损失(){
退还此项损失;
};
};
班级记分牌延伸球员{
建造师(轮){
超级();
这个圆=圆;
这个标志=0;
};
添加(){
返回this.round.push([…this.round].pop()+1);
}
优胜者(){
返回super.name;
};
失败者(){
返回super.constructor.name;
};
徽章(){
归还这个徽章;
};
测试(){
return super.win();
};
};
让plr=新玩家(“约翰”),
rnd=新记分板([0]);
log(plr.name,rnd.winner(),rnd.test())
在child中调用
super.constructor.name
作为返回状态返回父类名称(
player
)。为什么呢

因为这就是超级代码所做的。它不接受自己的
构造函数
属性,而是继承对象的
构造函数
属性。对于
scoreBoard.prototype
方法,这是
player.prototype
对象,其
.constructor.name
“player”

没有理由使用
super
,除非您正在覆盖继承的方法(或构造函数)。这意味着永远不要对普通数据属性使用
super
。它们始终存在于当前实例上。改用
此..

在子类中调用
rnd.winner()
时,我得到了
undefined
值。这应该从父级(如JOHN)返回玩家的名称

这是因为
.name
没有初始化,因为您的子类没有将参数传递给
super()
中的父构造函数。事实上,您的
rnd
根本不知道
plr
实例


无论如何,用继承来描述球员和记分牌之间的关系似乎是错误的e、 g.记分板,其中包含一组要显示的玩家对象。

不要使用带有普通数据属性的
super
。它们始终存在于当前实例上。改用
这个。名字
。为什么你觉得
记分牌
玩家
的延伸?我真的不懂逻辑。对于记分牌(采用赢家和输家的方法),你至少需要两名球员,因此我无法得到你在继承关系中所希望的结果。为什么
round
是数组
constructor.name
与您的
name
属性无关。它是函数的预定义属性(因为
构造函数
是一个函数)
(在我看来完全不正确的内容)并
返回此名称。name
它最终返回正确的名称。现在我明白了,我会努力找到一个好方法来处理这件事!是的,这是一种让它发挥作用的方法,是的,这是完全错误的,因为记分牌不是球员。