Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不创建实例的情况下获取类扩展的第一个类_Javascript_Oop - Fatal编程技术网

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。谢谢你提到这个!是的,它确实从所有超类继承?我不知道你还能指望什么。