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

如何从字符串变量获取对应JavaScript对象?点击元素切换对象方案

解决方法

方案1:利用全局对象(适用于已拆分出obj1、obj2等全局变量的场景)

如果obj1、obj2是全局变量(直接在顶级作用域声明,比如const obj1 = {...}),在浏览器环境下,全局变量会挂载到window对象上,你可以通过字符串索引直接获取:

// 假设已声明全局对象
const obj1 = { name: "Item 1", value: 100 };
const obj2 = { name: "Item 2", value: 200 };

// 给按钮绑定点击事件
document.querySelectorAll('button[data-itemname]').forEach(btn => {
  btn.addEventListener('click', function() {
    const targetObjName = this.dataset.itemname;
    // 通过window[字符串]获取对应全局对象
    const targetObj = window[targetObjName];
    // 现在可以使用targetObj了
    console.log(targetObj);
  });
});

方案2:整合到一个大对象(推荐,避免全局变量污染)

把所有子对象放到一个父对象里,通过键名索引获取,这是更规范的写法:

// 整合所有对象到一个父对象中
const allObjects = {
  obj1: { name: "Item 1", value: 100 },
  obj2: { name: "Item 2", value: 200 }
};

// 点击事件处理
document.querySelectorAll('button[data-itemname]').forEach(btn => {
  btn.addEventListener('click', function() {
    const targetObjName = this.dataset.itemname;
    // 通过父对象的键名获取子对象
    const targetObj = allObjects[targetObjName];
    // 使用目标对象
    console.log(targetObj);
  });
});

拆分原有单个obj的方法

如果当前只有一个大对象obj,想拆分成obj1、obj2等独立对象,直接解构赋值即可:

// 原有单个大对象
const obj = {
  obj1: { name: "Item 1", value: 100 },
  obj2: { name: "Item 2", value: 200 }
};

// 拆分成独立对象
const { obj1, obj2 } = obj;

// 之后就可以用方案1的方式获取了

注意:如果你的对象不是全局变量(比如在函数作用域内),方案1的window方法会失效,此时优先用方案2的整合方式,或者把对象放到一个可访问的作用域中,通过索引获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:10:54