You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过字符串动态初始化JavaScript类?

通过字符串调用JavaScript类的可行方案

当然可以通过字符串调用JavaScript类,除了你提到的数组存储方式,还有以下几种更灵活的实现方案:

1. 利用全局对象(跨环境通用)

如果你的类定义在全局作用域中,可以直接通过globalThis(ES2020+标准,兼容浏览器和Node.js)获取类引用:

const classNameAsString = "HelloWorld";

class HelloWorld {
  constructor() {
    console.log("Hello World")
  }
}

// 全局作用域下类会挂载到globalThis
const hW = new globalThis[classNameAsString](); // 输出 "Hello World"

注意:Node.js的CommonJS模块中,类不会自动挂到全局,需要手动赋值global.HelloWorld = HelloWorld;浏览器环境中类默认挂载在window上,globalThis也能兼容。

2. 自定义类映射对象

比起数组,用对象做映射更直观,键直接对应类名字符串,维护起来更清晰:

const classNameAsString = "HelloWorld";

class HelloWorld {
  constructor() {
    console.log("Hello World")
  }
}

// 创建类映射表
const ClassRegistry = {
  HelloWorld,
  // 可添加更多类
  // AnotherClass: AnotherClass
};

const hW = new ClassRegistry[classNameAsString](); // 输出 "Hello World"

这种方式是最推荐的——既安全又易维护,还能避免全局污染。

3. 使用eval(不推荐)

eval可以直接解析字符串并执行,但存在严重安全风险(若字符串来自不可信源,可能注入恶意代码),仅在你能100%控制字符串内容时使用:

const classNameAsString = "HelloWorld";

class HelloWorld {
  constructor() {
    console.log("Hello World")
  }
}

const hW = eval(`new ${classNameAsString}()`); // 输出 "Hello World"

内容的提问来源于stack exchange,提问作者Maik Lowrey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:25:57