簡體   English   中英

JavaScript:如何在父代的構造函數中獲取子類的方法?

[英]JavaScript: How to get child Class's methods in parent's constructor?

如何在A類的構造函數中獲取(例如, console.logB類的方法?

class A {
    constructor() {
        // GET B's method names ('ok', ...) here
    }
}

class B extends A {
    constructor() {
        super();
    }

    ok() {

    }
}

使用new.target.prototypeObject.getPrototypeOf(this)獲取實例new.target.prototype類的原型對象。 然后遍歷原型鏈到所有超類,並獲得每個對象的自身屬性。 不要忘記不可枚舉的屬性。

當然,在構造函數中將此功能用於日志記錄/調試之外的其他事情也是一種代碼味道。 一個類不必了解其子類。 如果要進行自動綁定,請讓每個子類構造函數自動綁定其自己的方法。

在“基本”構造函數中,您可以訪問完整的對象,因此可以檢查其真正的構造函數是什么,因此可以檢查其原型const childClassPrototype = this.constructor.prototype 擁有一個“子”原型,您可以使用Object.getOwnPropertyNames(childClassPrototype)獲得其屬性列表。 您要從該列表中過濾掉“構造函數”和不是函數的屬性。

注意:一旦您擁有多級原型鏈,此技術將僅使您能夠訪問“葉子”原型。 因此,您必須遍歷原型鏈。

注意2:對於自動綁定,您可能想考慮使用裝飾器。 一種實現方式在這里: https : //github.com/andreypopp/autobind-decorator-此技術使您可以更好地控制可能來自元編程的意外行為

暫無
暫無

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

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