Javascript 如何在不创建实例的情况下获取类扩展的第一个类
具有这样或类似的结构,具有多个继承层次:Javascript 如何在不创建实例的情况下获取类扩展的第一个类,javascript,oop,Javascript,Oop,具有这样或类似的结构,具有多个继承层次: class Abstract {}; class Concrete extends Abstract {}; class MoreSpecificConcrete extends Concrete {}; class EvenMoreSpecificConcrete extends MoreSpecificConcrete {}; 我想知道函数之前的最后一个类,它是甚至更具体的继承自的。如果您在函数原型(每个函数都扩展)处结束,您可以递归地通过原型链检
class Abstract {};
class Concrete extends Abstract {};
class MoreSpecificConcrete extends Concrete {};
class EvenMoreSpecificConcrete extends MoreSpecificConcrete {};
我想知道
函数
之前的最后一个类,它是甚至更具体的
继承自的。如果您在函数原型(每个函数都扩展)处结束,您可以递归地通过原型链检查,并返回在此之前的最后一个元素
function getBaseClass(MaybeClass) {
if (typeof MaybeClass !== 'function') return;
const Proto = Reflect.getPrototypeOf(MaybeClass);
return (Proto === Function.prototype || Proto === null)
? MaybeClass
: getBaseClass(Proto);
}
然后可以将返回的类与摘要进行比较:
getBaseClass(EvenMoreSpecificConcrete) === Abstract;
Fiddle:或者只是
getBaseClass(EvenMoreSpecificConcrete)==Abstract
:)也就是说,如果您只想检查一个类是否扩展了一个特定的其他类(而不是实际获取父类),那么您可以执行EvenMoreSpecificConcrete.prototype instanceof Abstract
。这也适用于任何介于两者之间的课程。你完全正确@FelixKling。谢谢你提到这个!是的,它确实从所有超类继承?我不知道你还能指望什么。