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