JavaScript中如何在同一对象内访问未提前声明的属性
问题:如何在创建对象时访问同一对象尚未声明的属性?
我有一个对象数组,需要遍历它来创建一个具有不同属性的新对象。问题在于创建新对象时,我需要访问一个尚未声明的属性。
源对象
let data = [ { "name": "one", "total": 12, "fec": "001" }, { "name": "one", "total": 1, "fec": "002" }, { "name": "two", "total": 5, "fec": "001" } ]
当前实现代码
let result; data.forEach((item) => { result = { name: item.name, result: data.find((item) => item.fec === '001') ?.total, dto: this.result + 5 } })
我的问题是:在forEach()方法内部,如何从dto属性访问同一对象内的result属性?
解决方案
你原代码里的this.result无法生效,因为箭头函数中的this继承自外部作用域,根本指向不到正在创建的对象。下面是几种可行的解决方式:
1. 先创建基础对象,再补充依赖属性
先构建包含result的对象,之后再基于这个对象的属性计算dto:
let result; data.forEach((item) => { // 先创建包含基础属性的临时对象 const tempObj = { name: item.name, result: data.find(i => i.fec === '001')?.total }; // 基于已存在的result属性计算dto tempObj.dto = tempObj.result + 5; result = tempObj; })
2. 提前计算依赖值,再构建对象
把需要用到的result值单独计算出来,直接在对象中使用变量:
let result; data.forEach((item) => { // 提前算出result对应的数值 const fecTotal = data.find(i => i.fec === '001')?.total; result = { name: item.name, result: fecTotal, dto: fecTotal + 5 }; })
3. 使用getter实现动态计算(适合属性可能变化的场景)
如果后续result的值可能改变,想让dto自动同步更新,可以用getter函数:
let result; data.forEach((item) => { result = { name: item.name, result: data.find(i => i.fec === '001')?.total, // 访问dto时动态计算 get dto() { return this.result + 5; } }; })
内容的提问来源于stack exchange,提问作者element
相关产品推荐
相关产品推荐

