在不实例化的情况下检查 class 是否是 class 的 child

Check if class is child of class without instantiating

假设我在 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";
  }
  ...
}

背景:我正在尝试创建一个模块化工厂方法,该方法可以自动实例化正确 child 类型的 object,而无需 hard-coding 列表。我正在使用从定义 child classes 的模块文件调用的 'static register(obj)' 方法来执行此操作。这允许根应用程序导入任何所需的库,而模块本身不知道可用的库。作为额外的完整性检查,我想确保 class 在将其添加到列表之前实际上是后代。

您不需要实例化,访问可能 child 的 .prototype 将起作用:

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

console.log(C.prototype instanceof A)