Javascript 可以在ES6继承类中调用超级setter吗?

Javascript 可以在ES6继承类中调用超级setter吗?,javascript,babeljs,ecmascript-6,Javascript,Babeljs,Ecmascript 6,我想知道以下内容是否符合ES6规范: X类{ 建造师(姓名){ 这个。_name=name; } 获取名称(){ 返回此。\u名称; } 集合名称(名称){ 这个._name=name+“X”; } } 类Y扩展X{ 建造师(姓名){ 超级(姓名); } 集合名称(名称){ super.name=名称; 这个._name+=“Y”; } } 想法是让y=newy(“”);y、 name=“hi”应导致y.name==“hiXY”为true 据我所知,这在启用ES6标志的Chrome中不起作用。

我想知道以下内容是否符合ES6规范:

X类{
建造师(姓名){
这个。_name=name;
}
获取名称(){
返回此。\u名称;
}
集合名称(名称){
这个._name=name+“X”;
}
}
类Y扩展X{
建造师(姓名){
超级(姓名);
}
集合名称(名称){
super.name=名称;
这个._name+=“Y”;
}
}
想法是
让y=newy(“”);y、 name=“hi”
应导致
y.name==“hiXY”
为true

据我所知,这在启用ES6标志的Chrome中不起作用。使用带有
es2015
标志的Babel也不起作用。在继承的setter中使用
super.name=…
是否不是ES6规范的一部分?或者这是Babel实现中的一个bug

class Y extends X {
  constructor(name) {
    super(name);
  }

  set name(name) {
    super.name = name;
    this._name += "Y";
  }
}
将使用仅用于setter的访问器正确覆盖
名称
,而不使用getter。这意味着您的
y.name==“hiXY”
将失败,因为
y.name
将返回
undefined
,因为
name
没有getter。你需要:

class Y extends X {
  constructor(name) {
    super(name);
  }

  get name(){
    return super.name;
  }

  set name(name) {
    super.name = name;
    this._name += "Y";
  }
}

定义“不起作用”?通过在没有匹配的
get name(){return super.name;}
的子类上定义
set name
,可以覆盖基类中的
get name
。这就是问题所在吗?@DenysSéguret没有,因为我想让超级二传跑动(在名字的末尾加上一个X)。@loganfsmyth你说得对!我没有意识到定义
set name
会覆盖
get name
。一旦我添加了getter,它似乎也能工作!谢谢你帮我节省了很多调试时间。