javascript - 如何在不创建实例的情况下获取类扩展的第一个类

标签 javascript oop

具有像这样或类似的多层次继承结构:

class Abstract {};
class Concrete extends Abstract {};
class MoreSpecificConcrete extends Concrete {};
class EvenMoreSpecificConcrete extends MoreSpecificConcrete {};

我想知道 EvenMoreSpecificConcrete 继承自 Function 之前的最后一个类。

最佳答案

您可以递归地遍历原型(prototype)链,检查您是否以 Function 原型(prototype)(每个 Function 都扩展)结束并返回在此之前的最后一个元素。

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 :https://jsfiddle.net/9nLuvyob/

关于javascript - 如何在不创建实例的情况下获取类扩展的第一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58421672/

相关文章:

javascript - 带有 Socket.IO 的原始 'this' 上下文

javascript - 向导表单 jQuery 'next' 按钮不起作用

javascript - 使用 onclick 更改文本然后再改回来

javascript - 如何使用 Javascript DOM 收集选定的下拉文本?

php - 为什么要使用 OOP 来隐藏信息?

python - 在 python 中使用对象的属性

java - 恒定的细节应该是抽象的一部分还是实现的一部分?

javascript - 使用 Bootstrap 提前输入自动完成工作正常,但我需要相应的值

java - 面向对象的Java

java - 单一职责原则和服务/存储库设计