我有这样的代码
class Animal{}
class Dog extends Animal {}
class Cat extends Animal {}
class Donkey extends Animal {}
我想查看应用程序宇宙中的所有类,当我找到一个从 Animal 派生的类时,我想创建一个该类型的新对象并将其添加到列表中。这允许我添加功能而无需更新事物列表。所以我可以避免以下情况:
var animals = [];
animals.push( new Dog() );
animals.push( new Cat() );
animals.push( new Donkey() );
PS:我不想向我的类添加额外的功能或显式调用它们。
最佳答案
我认为您可以使用装饰器。例如,您可以创建一个 @Extends()
并提供基类作为参数,例如@Extends(Animal)
。在装饰器函数中,您可以获取用 @Extends 装饰的类的名称,并将其放入数组或对象中。不知道它是否适用于浏览器,但应该适用。在带有 TypeScript 的 Node 中,我会做类似的事情:
import { MyClassMetadata } from './';
export function Extends(parent): (...args: any[]) => void {
return (target: object): void => {
MyClassMetadata.someVariableToStoreChildren[parent.constructor.name].push(
target,
);
}
}
然后您可以访问存储给定类的子级数组的 MyClassMetadata 变量,并按您想要的方式使用它。您可以使用它并获得所需的结果。
关于javascript - 查找 Javascript 应用程序中扩展基类的所有类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31618212/