以下が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"
がtrueになるはずです。
私の知る限り、これはES6フラグがオンになっているChromeでは機能しません。また、es2015
フラグが付いたBabelでは機能しません。継承されたセッターでsuper.name = ...
を使用しています。 ES6仕様の一部ではありませんか?それとも、これはBabelの実装のバグですか?
class Y extends X {
constructor(name) {
super(name);
}
set name(name) {
super.name = name;
this._name += "Y";
}
}
name
をjustセッターのアクセサーで適切にオーバーライドします。ゲッターはありません。それはあなたの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";
}
}
この場合、より簡単な解決策があります。
class Y extends X {
set name(name) {
super.name = name;
this._name += "Y";
}
}