我想知道以下内容是否符合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实施中的错误吗?
答案 0 :(得分:23)
class Y extends X {
constructor(name) {
super(name);
}
set name(name) {
super.name = name;
this._name += "Y";
}
}
将使用 setter的访问者正确覆盖name
,而不使用getter。这意味着您的y.name === "hiXY"
将失败,因为y.name
将返回undefined
,因为name
没有获取者。你需要:
class Y extends X {
constructor(name) {
super(name);
}
get name(){
return super.name;
}
set name(name) {
super.name = name;
this._name += "Y";
}
}
答案 1 :(得分:-1)
对于这种情况,您有一个更简单的解决方案:
class Y extends X {
set name(name) {
super.name = name;
this._name += "Y";
}
}