覆盖setter,并且还必须覆盖getter

时间:2015-03-09 20:01:27

标签: javascript class ecmascript-6 getter-setter traceur

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的正确方法(同时还是根本没有)?

1 个答案:

答案 0 :(得分:11)

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

请注意,此行为未从ES5更改。