我想知道以下是否符合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实施中的一个错误?
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
会undefined
因为没有吸气剂而返回name
.你需要:
class Y extends X { constructor(name) { super(name); } get name(){ return super.name; } set name(name) { super.name = name; this._name += "Y"; } }