JavaScript如何在对象内部正确访问对象自身属性
错误原因
报错的核心原因是JavaScript执行赋值语句时,会先计算等号右侧的所有内容,全部计算完成后才会把结果赋值给等号左侧的变量。
你写的代码里,等号右侧的数组、数组内的对象还在构造阶段,experiments变量还没完成赋值,此时访问experiments[0]得到的是undefined,再取.name自然会抛出未定义错误。同时你也无法在同一个对象字面量的构造过程中,直接跨属性引用同对象的其他属性——此时对象本身还没创建完成,不存在可被引用的实体。
可行解决方法
你可以根据实际场景选下面任意一种写法:
- 分步赋值(最直观、无兼容问题)
先创建基础的数组和对象,等初始化完成后再给file属性赋值:
let experiments = [ { name: "C200929R01_SizeMarker" } ]; // 此时experiments已经完成初始化,可以正常访问内部属性 experiments[0].file = experiments[0].name + ".xrrx";
- 提取公共值(适合一次性声明的场景)
把重复用到的name值提前存到变量里,避免引用未初始化的experiments:
const experimentName = "C200929R01_SizeMarker"; let experiments = [ { name: experimentName, file: experimentName + ".xrrx" } ];
- 使用getter访问器(适合name属性后续可能修改的场景)
给file定义getter,访问file属性时会动态读取当前对象的name值拼接后缀,不需要初始化时就计算好值:
let experiments = [ { name: "C200929R01_SizeMarker", get file() { return this.name + ".xrrx"; } } ];
注意:如果用getter方案,
file是访问器属性而非普通数据属性,如果你需要给file重新赋值固定值,要额外定义setter,或者优先选前两种方案。
内容的提问来源于stack exchange,提问作者siw1171
相关产品推荐
相关产品推荐

