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

Dig*_*rat 1 javascript ecmascript-6 es6-class

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

class A { ... }
class B extends A { ... }
class C extends B { ... }
Run Code Online (Sandbox Code Playgroud)

如何在不创建 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";
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

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

Cer*_*nce 5

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

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

console.log(C.prototype instanceof A)
Run Code Online (Sandbox Code Playgroud)