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只是想知道我是否可以做自动绑定;)谢谢这个效果更好:)谢谢。这样效果更好:)