【发布时间】:2021-05-27 22:15:03
【问题描述】:
我目前正在使用 Webpack 和 Babel 开发一个项目。更具体地说,我使用 vue-cli 框架,但这不重要。
我想从它的字符串名称中获取一个构造函数。
我的班级在 World.ts 文件中是这样设置的:
export default class World { ... }
并在另一个文件中这样使用:
import World from "./World";
我想做的是:
let foo = new World();
let className = foo.constructor.name;
let bar = new SCOPE[className]();
问题是我没有找到合适的 SCOPE。
我试过window[className] 不行。
我试过eval('let bar = new ${className}()'),也不行。
我在导入下尝试了const SCOPE = (0, eval)("this"),但没有成功,它返回window 对象。
到目前为止,我找到的唯一解决方案是按构造函数的名称创建一个 Map,但这根本不是动态的。
const classesByName = new Map<string, any>([
[World.name, World],
...
]);
所以...我猜 Webpack 或 Babel 正在某处做某事。
我该怎么办?
【问题讨论】:
-
你这样做的目的是什么?
-
动态解析特定原型下的 JSON 对象。
-
那句话没有意义。 “未解析”是什么意思?
-
“解析”我的错。是的,我知道 JSON 是什么,我正在合成...我想要的是从一个 JSON 字符串开始,并以一个特定类的对象结束。整个动态,使用
type属性、Object.assign 和其他东西。 -
@FlorentDescroix 啊,这更有意义。 :-)
标签: javascript typescript webpack babeljs vue-cli