31
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する必要があるように見えます。undefinedgetget property()

これは仕様の一部であると思いますが、動作がクロス コンパイルの結果である可能性があります。確かに、これはオーバーライドされたセッターとゲッターをコーディングする正しい方法ですか (同時にまたはまったくない)?

4

1 に答える 1

25

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

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

于 2015-03-09T20:21:39.260 に答える