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也必须被覆盖,否则undefined返回(即,该get方法未继承,取消注释get property()上面的子类方法,一切正常)。

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

4

1 回答 1

25

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

请注意,此行为与 ES5 相比并没有改变。

于 2015-03-09T20:21:39.260 回答