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

如何在JavaScript模块中获取所有本地定义的对象?

问题解决:ES模块中遍历声明的对象

首先明确:你原来的方法行不通,因为ES模块(type="module"的script)的顶层this是undefined,而且你用const声明的这些变量属于模块私有作用域,不会挂载到任何全局对象或this上,自然没法通过Object.getOwnPropertyNames(this)拿到它们。

要实现遍历这些对象,推荐两种方案:

方案1:统一封装到父对象(推荐)

把所有需要遍历的对象放到一个父对象里,直接遍历这个父对象的属性即可,这是最清晰、最安全的方式:

<script type="module">
  const moduleObjects = {
    _Tasks: {},
    _client: {},
    _client_simple: {},
    _status: {},
    _status_simple: {}
  };

  // 遍历所有对象
  for (const [name, obj] of Object.entries(moduleObjects)) {
    console.log(`对象名:${name},内容:`, obj);
  }
</script>

方案2:手动枚举变量名(不推荐,仅作备选)

如果不想修改原有变量的声明方式,可以手动列出所有变量名,再通过eval获取对应值(注意:eval存在安全风险,仅在确定变量名安全的场景下使用):

<script type="module">
  const _Tasks = {};
  const _client = {};
  const _client_simple = {};
  const _status = {};
  const _status_simple = {};

  // 手动列出要遍历的变量名
  const targetVars = ['_Tasks', '_client', '_client_simple', '_status', '_status_simple'];
  targetVars.forEach(varName => {
    const obj = eval(varName);
    console.log(`对象名:${varName},内容:`, obj);
  });
</script>

补充说明

ES模块的设计核心就是隔离作用域,顶层变量默认不会暴露到全局,所以没有原生方法可以直接枚举模块内所有声明的变量——除非你主动把它们聚合到一个容器里,这也是方案1被优先推荐的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:15:56