p5.js中引用对象内现有数组失效问题求助
解决对象字面量内部引用自身属性的错误
你遇到的问题是在对象字面量定义过程中,试图引用还未完全初始化的对象自身属性。当你写var weapons = { ... equipped: weapons.M4A1 }的时候,JavaScript正在创建这个weapons对象,但此时weapons变量还没有被完全赋值,所以内部引用weapons.M4A1会找不到对应的属性,导致错误。
几种可行的解决方案:
方案1:先拆分武器数据,再构建对象
把武器的属性值单独提前定义,再在对象里引用,这样就不会有初始化顺序的问题:
// 先单独定义武器数据 const M4A1Stats = [10, 10, 0.2, 5, 1]; var weapons = { M4A1: M4A1Stats, primary: M4A1Stats, secondary: M4A1Stats, equipped: M4A1Stats, };
方案2:先创建空对象,再逐步添加属性
这种方式让对象先完成初始化,再引用自身属性,完全避开了顺序问题:
var weapons = {}; // 先添加武器数据 weapons.M4A1 = [10, 10, 0.2, 5, 1]; // 再设置引用属性 weapons.primary = weapons.M4A1; weapons.secondary = weapons.M4A1; weapons.equipped = weapons.M4A1;
方案3:使用getter函数(适合需要动态引用的场景)
如果需要属性动态关联最新的M4A1数据,可以用对象的getter方法,每次访问属性时都会重新获取当前的M4A1值:
var weapons = { M4A1: [10, 10, 0.2, 5, 1], get primary() { return this.M4A1; }, get secondary() { return this.M4A1; }, get equipped() { return this.M4A1; }, };
为什么原代码会报错?
JavaScript解析对象字面量时,是先创建一个临时对象,然后依次给这个临时对象添加属性,最后才把这个临时对象赋值给weapons变量。在这个过程中,当你在内部写weapons.M4A1时,weapons变量还没有被赋值,所以此时weapons是undefined,自然无法访问M4A1属性。
内容的提问来源于stack exchange,提问作者Coding King2
相关产品推荐
相关产品推荐

