在不实例化的情况下检查类是否是类的子类
假设我在 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)