web-dev-qa-db-ja.com

セッターをオーバーライドし、ゲッターもオーバーライドする必要があります

_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()メソッドのコメントを外すと、すべて正常に動作します)。

これは仕様の一部だと思いますが、動作がクロスコンパイルの結果である場合は、おそらく従います。念のために言うと、これはオーバーライドされたセッターとゲッターをコーディングする正しい方法ですか?

20
user5321531

はい、これは意図的なものです(仕様の一部)。オブジェクトが独自のプロパティ(.property(例では)、このプロパティが使用され、継承されたプロパティではありません。そのプロパティは存在するが、getterのないアクセサープロパティである場合、undefinedが返されます。

この動作はES5から変更されていないことに注意してください。

11
Bergi