覆盖一个setter,getter也必须被覆盖

Override a setter, and the getter must also be overridden

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() 方法,一切正常。

我假设这是规范的一部分。如果行为是交叉编译的结果,它可能会遵循。可以肯定的是,这是对覆盖的 setter 和 getter 进行编码的正确方法吗(同时或根本不同)?

是的,这是故意的(规范的一部分)。如果一个对象有自己的 属性(在你的例子中是 .property),这个 属性 将被使用而不是继承的。如果 属性 存在,但它是一个没有 getter 的访问器 属性,那么将返回 undefined

请注意,此行为在 ES5 中没有改变。