是否可以在继承类的ES6中调用一个超级setter?
Is it possible to call a super setter in ES6 inherited classes?
我想知道以下是否符合 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 实现中的错误?
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
将 return undefined
因为 name
没有 getter。您需要:
class Y extends X {
constructor(name) {
super(name);
}
get name(){
return super.name;
}
set name(name) {
super.name = name;
this._name += "Y";
}
}
我想知道以下是否符合 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 实现中的错误?
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
将 return undefined
因为 name
没有 getter。您需要:
class Y extends X {
constructor(name) {
super(name);
}
get name(){
return super.name;
}
set name(name) {
super.name = name;
this._name += "Y";
}
}