[英]JavaScript: How to get child Class's methods in parent's constructor?
如何在A
類的構造函數中獲取(例如, console.log
) B
類的方法?
class A {
constructor() {
// GET B's method names ('ok', ...) here
}
}
class B extends A {
constructor() {
super();
}
ok() {
}
}
使用new.target.prototype
或Object.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.