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

如何将对象当前键作为参数传入其值对应的方法?避免重复编写键名

问题解答

好问题!很遗憾,在直接定义对象字面量的时候,没办法自动把当前键名作为参数传给值位置的方法调用——因为对象初始化时,每个键值对的求值过程里并没有内置的方式能拿到当前的键名。比如你写的:

const versions = {
  VersionOne: { welcomeMessage: this.localization.get(/* 这里没法自动拿到'VersionOne' */) },
  VersionTwo: { welcomeMessage: this.localization.get(/* 这里没法自动拿到'VersionTwo' */) }
};

这种写法里,方法调用的参数位置没有办法直接引用当前的键名,必须手动传入。不过我们可以用一些技巧来避免重复书写长键名:

方法1:用循环动态生成对象属性

如果你有多个类似的键,可以先把所有键名放在一个数组里,然后通过循环遍历数组来生成对象的属性,这样键名只需要写一次:

// 先定义所有需要的版本键名
const versionKeys = ['VersionOne', 'VersionTwo', 'SuperLongVersionNameThatYouDontWantToRepeat'];

// 初始化空对象
const versions = {};

// 遍历键名数组,动态生成每个属性
versionKeys.forEach(key => {
  versions[key] = {
    welcomeMessage: this.localization.get(key)
  };
});

方法2:使用Object.fromEntries简化写法

ES2019+支持的Object.fromEntries可以让我们用更简洁的方式生成对象:

const versionKeys = ['VersionOne', 'VersionTwo', 'SuperLongVersionNameThatYouDontWantToRepeat'];

const versions = Object.fromEntries(
  versionKeys.map(key => [
    key,
    { welcomeMessage: this.localization.get(key) }
  ])
);

方法3:用工具函数封装逻辑

如果你的版本对象还有其他复杂逻辑,可以写一个工具函数来生成每个版本的配置,这样即使键名重复写一次,后续修改逻辑会更方便:

// 封装生成版本配置的函数
function createVersionConfig(key) {
  // 这里可以添加更多其他属性的逻辑
  return {
    welcomeMessage: this.localization.get(key),
    // 比如其他属性:
    someOtherProp: this.someOtherMethod(key)
  };
}

// 调用时绑定正确的this(如果是在类中,确保this指向当前实例)
const versions = {
  VersionOne: createVersionConfig.call(this, 'VersionOne'),
  VersionTwo: createVersionConfig.call(this, 'VersionTwo'),
  SuperLongVersionNameThatYouDontWantToRepeat: createVersionConfig.call(this, 'SuperLongVersionNameThatYouDontWantToRepeat')
};

这些方法都能帮你避免重复书写长键名,同时实现你想要的把键名传给方法的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:30:40