JavaScript对象方法中新增属性后访问返回undefined问题求解
问题根因
你定义的calcAge方法内部的赋值逻辑,仅在方法被主动调用时才会执行。你没有调用过calcAge的情况下,rodrigo对象上从始至终都不存在age属性,访问不存在的对象属性自然返回undefined。另外你贴的代码片段最后遗漏了对象闭合的},实际运行时需要先补上。
修复方式
- 方式1:需要使用
age属性前,先调用一次calcAge方法即可
const rodrigo = { firstName: 'Rodrigo', lastName: 'Pinto', job: 'Programmer', birthYEar: '1997', friends: ['Michael', 'Scott', 'Jim'], hasDriversLicense: true, calcAge: function () { this.age = 2021 - this.birthYEar; return this.age; } } // 先调用方法完成age属性的赋值 rodrigo.calcAge(); // 此时访问age就能拿到正确值 console.log(rodrigo.age); // 输出24
- 方式2:如果希望对象初始化完成就自带
age属性,可以在对象定义完成后立即调用一次calcAge,或者直接把age的计算逻辑写在对象属性定义处。
优化建议
你当前birthYEar属性存储的是字符串类型,虽然减法运算会自动触发隐式类型转换得到正确结果,但还是建议改成数字类型1997,避免后续其他运算出现预期外的类型转换问题。
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

