在不实例化的情况下检查类是否是类的子类

假设我在 JavaScript 模块中有以下内容:

class A { ... }
class B extends A { ... }
class C extends B { ... }

如何在不创建 C 实例的情况下确认 C 是 A 的后代?

register(B);
register(C);

register(obj) {
  // I need this test, but without the new call
  if (!new obj() instanceof A) {
     throw Error "Not a child";
  }
  ...
}

背景:我正在尝试创建一个模块化工厂方法,该方法可以自动实例化正确子类型的对象,而无需对列表进行硬编码。我正在使用从定义子类的模块文件中调用的“静态寄存器(obj)”方法来执行此操作。这允许根应用程序导入任何所需的库,而模块本身不知道可用的库。作为额外的完整性检查,我想在将它添加到列表之前确保该类实际上是一个后代。

回答

您不需要实例化,访问.prototype可能的孩子的工作:

class A {  }
class B extends A {  }
class C extends B {  }

console.log(C.prototype instanceof A)


以上是在不实例化的情况下检查类是否是类的子类的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>