JavaScript如何基于变量动态实例化第三方库中指定名称的类
实现方案
你之前的写法无法运行的核心原因是:点号访问符会将后面的标识符当做固定字符串属性名处理,而非读取对应变量的实际值,要读取动态属性名需要使用方括号语法,结合Reflect的实现方案如下:
const name = "Class2"; // 构造函数入参数组,按实际需求填写 const params = [param1, param2]; // 从lib对象上动态取出对应类的构造函数 const clazz = lib[name]; // 使用Reflect.construct完成实例化,天然适配不定长入参场景 const myInstance = Reflect.construct(clazz, params);
如果不需要兼容特别复杂的入参场景,不用Reflect也可以直接实现,全程不需要手动维护类名映射表:
const myInstance = new lib[name](...params);
注意事项
- 可以新增一层合法性校验,避免传入不存在的类名导致报错:
if (typeof lib[name] !== 'function') { throw new Error(`当前库中不存在${name}类`); }
- 该方案会直接读取lib对象当前挂载的所有类,库迭代新增的类只要依然挂载在lib对象下,无需修改代码即可直接适配。
内容的提问来源于stack exchange,提问作者Michele Tuloski Furci
相关产品推荐
相关产品推荐

