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

已知类名如何获取对应class对象?JavaScript不使用eval的实现方法

问题原因说明

你遇到的访问差异是ES规范的明确规定:

  • 全局作用域下的function声明(非严格模式)会自动挂载为globalThis的属性,所以你可以通过globalThis.myfn直接访问
  • 全局作用域下的class、let、const声明只会存入全局词法环境,不会成为globalThis的属性,所以用之前拿函数的方法访问不到

替代实现方案

方案1:可修改eval执行的代码时优先选择

  • 主动挂载到全局对象
    把eval执行的代码改成class myclass {}; globalThis.myclass = myclass;,之后直接用globalThis.myclass就能拿到类对象,这是最稳妥的方案。
  • 直接接收eval的返回值
    class声明作为eval执行的表达式时,返回值就是类本身,你直接接住返回值即可,不需要后续按名称查找:
    const myClass = eval('class myclass {}');
    

方案2:无法修改eval代码、且已经提前执行过class声明

这种场景可以用new Function替代eval,安全性远高于直接调用eval:

const myClass = new Function('return myclass')();

new Function生成的函数只会在全局作用域运行,不会读取/修改你当前的局部作用域变量,规避了eval的绝大多数安全风险。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:27:01