簡體   English   中英

覆蓋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起沒有改變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM