JavaScript:如何获取子类';在父';谁的构造函数?

JavaScript:如何获取子类';在父';谁的构造函数?,javascript,class,inheritance,constructor,Javascript,Class,Inheritance,Constructor,如何在Aclass的构造函数中获取(console.logfor ex.)Bclass的方法 class A { constructor() { // GET B's method names ('ok', ...) here } } class B extends A { constructor() { super(); } ok() { } } 使用new.target.prototype或Object.

如何在
A
class的构造函数中获取(
console.log
for ex.)
B
class的方法

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

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

    ok() {

    }
}

使用
new.target.prototype
Object.getPrototypeOf(this)
获取实例化子类的prototype对象。然后访问所有超类,并获取每个对象的自身属性。不要忘记不可枚举的属性


当然,在构造函数中使用它不仅仅是为了日志记录/调试,这是一种代码味道。类不需要知道它的子类。如果要执行自动绑定,请让每个子类构造函数自动绑定自己的方法。

使用
new.target.prototype
Object.getPrototypeOf(this)
获取实例化子类的prototype对象。然后访问所有超类,并获取每个对象的自身属性。不要忘记不可枚举的属性

当然,在构造函数中使用它不仅仅是为了日志记录/调试,这是一种代码味道。类不需要知道它的子类。如果要进行自动绑定,请让每个子类构造函数自动绑定自己的方法。

在“基本”构造函数中,您可以访问complete对象,因此可以检查其真正的构造函数是什么,从而检查其原型
const childClassPrototype=this.constructor.prototype
。拥有一个“child”原型,您可以通过
Object.getOwnPropertyNames(childClassPrototype)
获得它的属性列表。从该列表中,您希望筛选出“构造函数”和非函数的属性

注意:一旦你有了一个多层次的原型链,这种技术只会让你访问“叶子”原型。因此,您必须迭代原型链

注2:对于自动链接,你可以考虑使用装饰器。这里有一个实现:-此技术可以更好地控制元编程中可能出现的意外行为,在“基本”构造函数中,您可以访问完整的对象,因此可以检查其真正的构造函数是什么,从而检查其原型
const childClassPrototype=this.constructor.prototype
。拥有一个“child”原型,您可以通过
Object.getOwnPropertyNames(childClassPrototype)
获得它的属性列表。从该列表中,您希望筛选出“构造函数”和非函数的属性

注意:一旦你有了一个多层次的原型链,这种技术只会让你访问“叶子”原型。因此,您必须迭代原型链


注2:对于自动链接,你可以考虑使用装饰器。这里有一个实现:-这种技术可以更好地控制元编程可能产生的意外行为

听起来像一个大代码,有什么好处和意义?@RomanPerekhrest只是想知道我是否可以进行自动绑定;)听起来像一个大代码,有什么好处和意义?@RomanPerekhrest只是想知道我是否可以做自动绑定;)谢谢这个效果更好:)谢谢。这样效果更好:)