繁体   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