编程语言
首页 > 编程语言> > javascript – 是否可以在ES6继承的类中调用超级setter?

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

作者:互联网

我想知道以下是否符合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";
  }
}

想法是让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";
  }
}

将使用只有setter的访问器正确覆盖名称,没有getter.这意味着您的y.name ===“hiXY”将失败,因为y.name将返回undefined,因为没有名称的getter.你需要:

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

  get name(){
    return super.name;
  }

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

标签:javascript,ecmascript-6,babeljs,es2015
来源: https://codeday.me/bug/20191005/1857150.html