当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《是否可以在ES6继承的类中调用超级setter?》经验,为你挑选了1个好方法。

我想知道以下是否符合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中无效.它也不能使用Babel与es2015旗帜.是用super.name = ...在继承二传手不是ES6规范的一部分?或者这是Babel实施中的一个错误?



1> loganfsmyth..:
class Y extends X {
  constructor(name) {
    super(name);
  }

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

name使用只有 setter 的访问器正确覆盖,没有getter.这意味着你的y.name === "hiXY"失败y.nameundefined因为没有吸气剂而返回name.你需要:

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

  get name(){
    return super.name;
  }

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


你刚给我节省了很多调试时间.
推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有