JS对象内部将属性运算结果直接作为属性值的正确语法是什么
实现方案
方案1:初始化时一次性计算固定值
如果你的foot和shoe属性后续不会修改,直接在对象创建完成后赋值即可:
const obj = { foot: [1, 3, 5], shoe: [7, 9, 11], } // 直接计算结果赋值给dump属性 obj.dump = obj.foot[1] + obj.shoe[0];
此时obj.dump就是数值类型,直接访问即可得到10。
方案2:访问时动态计算最新值
如果后续需要修改foot或shoe的值,且希望dump同步返回最新的计算结果,使用JS原生的getter访问器语法:
const obj = { foot: [1, 3, 5], shoe: [7, 9, 11], // 定义getter访问器 get dump() { return this.foot[1] + this.shoe[0]; } }
不需要加括号调用,直接访问obj.dump就会自动执行计算逻辑返回结果,比如你修改obj.foot[1] = 5之后再访问obj.dump就会返回12。
常见错误说明
你之前写的IIFE、匿名函数直接赋值的方案失效原因:
- 直接把函数赋值给
dump的话,dump本身就是函数类型,不加括号调用只会返回函数本身,不会执行计算逻辑。如果不修改赋值逻辑,你也可以通过obj.dump()的方式调用得到结果,但不符合你“直接访问属性返回数值”的需求 - 写在对象字面量内的IIFE执行时,
this指向的是外层执行上下文,并不指向当前正在创建的obj对象,无法正确读取foot和shoe的值
相关搜索关键词
- JavaScript 访问器属性
- JavaScript getter 语法
- 对象计算属性
内容的提问来源于stack exchange,提问作者monsto
相关产品推荐
相关产品推荐

