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

箭头函数场景下的对象属性名简写疑问:是否有更简洁赋值方式?

针对你的JavaScript对象属性简写问题的解决方案

好问题!确实,当前JS的对象字面量语法里,{foo}是属性名简写(对应{foo: foo}),但{foo()}会被解析成对象的方法定义(相当于把函数本身赋值给foo属性,而不是执行函数后的结果),所以直接这么写肯定会报错。

目前原生JS里还没有专门的语法糖直接实现你想要的{foo()}等价于{foo: foo()}(因为前者的语法已经被方法定义占用了),不过有几种可行的写法可以帮你简化代码:

1. 最稳妥的原生写法(推荐团队协作场景)

虽然你觉得有点繁琐,但这是最清晰、兼容性最好的标准写法,可读性拉满,几乎不会有歧义:

const foo = () => 1;
const bar = { foo: foo() }; // 结果:{ foo: 1 }

2. 提前缓存函数结果(适合结果需要复用的场景)

如果这个函数的执行结果要在多个地方用到,先把结果存起来再用属性简写,反而更高效:

const foo = () => 1;
const fooResult = foo();
const bar = { foo: fooResult }; // 等价于 { foo: 1 }

如果只是单次使用,其实和第一种写法差别不大,但复用场景下能减少重复执行函数的开销。

3. 自定义工具函数(适合高频使用这类逻辑的场景)

如果你经常需要把具名函数的执行结果绑定到同名属性上,可以封装一个小工具函数来简化:

// 工具函数:接收一个具名函数,返回「函数名: 执行结果」的对象
const fnToProp = (fn) => ({ [fn.name]: fn() });

// 使用示例
const foo = () => 1;
const bar = fnToProp(foo); // 结果:{ foo: 1 }

注意这个方法依赖函数的name属性,所以只适合有明确变量名的具名函数(刚好符合你的场景),如果是匿名函数的话属性名会变成anonymous,就不适用了。

反例:别这么写!

有人可能会想到用立即执行函数来凑,但这反而更繁琐,完全没必要:

const foo = () => 1;
const bar = (() => ({ foo: foo() }))(); // 结果对,但写法更绕

总结一下:如果只是偶尔用,直接用方案1就好;如果频繁遇到这种场景,方案3能帮你省不少重复代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:11:19