Переопределите сеттер, и геттер также должен быть переопределен

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() выше, и все работает отлично).

Я предполагаю, что это часть спецификации. Он будет следовать, хотя, возможно, если поведение было следствием кросс-компиляции. Просто, чтобы быть уверенным, это правильный способ кодирования переопределенных сеттеров и геттеров (оба одновременно или совсем нет)?

Ответ 1

Да, это намеренно (часть спецификации). Если объект имеет собственное свойство (.property в вашем примере), это свойство будет использоваться, а не унаследовано. Если это свойство существует, но является свойством accessor без getter, тогда возвращается undefined.

Обратите внимание, что это поведение не изменилось с ES5.