如题,因为项目中有很多地方需要动态实例化操作,再就是项目中没有使用模块与命名空间来管理文件,而是直接export class来抒写的类。网上找到一个方式如下,但是他要求有命名空间:
“ new (manager)[“TestMgr”](); ”
没懂什么意思。实例化一个类不是直接new className()就可以了吗。
引用一个类 import className from ‘xxx/xxx/xxx.ts’。
根据一个字符串(类的名字),然后实例化一个类出来,也就是根据名字字符串动态实例化一个类。这个应该和反射使用有关,但关于TS语言的反射用法网上太少。像白鹭就有一个getDefinitionByName方法很方便
把装饰器学完你就知道怎么反射了。
具体参考官方的@ccclass,官方就可以做到根据名称获得对应的类。
我看官方是这么写的:
getConstructor(typeOrClassName: string | Constructor): Constructor | null | undefined {
if (!typeOrClassName) {
return null;
}
if (typeof typeOrClassName === ‘string’) {
return js.getClassByName(typeOrClassName) as Constructor | undefined;
}
return typeOrClassName;
}
1赞
谢谢,试下