_class AbstractClass {
constructor() {
}
set property(value) {
this.property_ = value;
}
get property() {
return this.property_;
}
}
class Subclass extends AbstractClass {
constructor() {
super();
}
set property(value) {
super.property = value;
if (!(this.property_ instanceof SubclassAssociatedClass)) throw new TypeError();
}
//get property() {
// return super.property;
//}
}
_
属性のset
メソッドをオーバーライドすると、get
メソッドもオーバーライドする必要があるようです。それ以外の場合は、undefined
が返されます(つまり、get
メソッドは継承され、上記のサブクラスget property()
メソッドのコメントを外すと、すべて正常に動作します)。
これは仕様の一部だと思いますが、動作がクロスコンパイルの結果である場合は、おそらく従います。念のために言うと、これはオーバーライドされたセッターとゲッターをコーディングする正しい方法ですか?
はい、これは意図的なものです(仕様の一部)。オブジェクトが独自のプロパティ(.property
(例では)、このプロパティが使用され、継承されたプロパティではありません。そのプロパティは存在するが、getterのないアクセサープロパティである場合、undefined
が返されます。
この動作はES5から変更されていないことに注意してください。