是否可以在继承类的ES6中调用一个超级setter?

Is it possible to call a super setter in ES6 inherited classes?

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

class X {
  constructor(name) {
    this._name = name;
  }

  get name() {
    return this._name;
  }

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

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

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

想法是 let y = new Y(""); y.name = "hi" 应该导致 y.name === "hiXY" 为真。

据我所知,在打开 ES6 标志的情况下,这在 Chrome 中不起作用。使用带有 es2015 标志的 Babel 也不起作用。在继承的 setter 中使用 super.name = ... 不是 ES6 规范的一部分吗?或者这是 Babel 实现中的错误?

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

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

将使用 的访问器正确覆盖 name 只是 setter,没有 getter。这意味着您的 y.name === "hiXY" 将失败,因为 y.name 将 return 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";
  }
}