为何JS对象中未调用calcAge函数时访问Age属性返回undefined?
问题原因分析
你遇到的问题核心是函数内的代码只有在函数被调用时才会执行:
- 你定义的
calcAge函数里,this.Age = 2023 - this.birthYear这条赋值语句,只有当你主动调用rajat.calcAge()的时候才会执行,此时才会给rajat对象添加Age属性并赋值。 - 当你直接打印
rajat.Age时,calcAge函数从未被调用过,Age属性还不存在于rajat对象中,所以输出undefined。
解决方法
如果你想让Age属性在对象初始化后就可用,不需要手动调用函数,可以用以下几种方式:
1. 初始化时主动调用calcAge
在对象定义完成后立即调用函数,提前创建Age属性:
const rajat = { FirstName: "Rajat", middleName: "Kumar", lastName: "sahoo", birthYear: 1998, location: "Bhubaneswar", job: "Programmer", friends: ["Michel", "Jack", "James", "Juile"], calcAge: function () { this.Age = 2023 - this.birthYear; return this.Age; }, }; rajat.calcAge(); // 调用函数,创建并赋值Age属性 console.log(rajat.Age); // 输出25
2. 使用ES6 getter属性
用getter可以让Age成为动态计算的属性,访问时自动执行计算逻辑,无需手动调用函数:
const rajat = { FirstName: "Rajat", middleName: "Kumar", lastName: "sahoo", birthYear: 1998, location: "Bhubaneswar", job: "Programmer", friends: ["Michel", "Jack", "James", "Juile"], get Age() { return 2023 - this.birthYear; }, }; console.log(rajat.Age); // 直接访问即可输出25
这种方式的优势是,如果你后续修改birthYear,再次访问Age会自动更新计算结果。
3. 初始化时直接计算静态属性值
如果年龄不需要动态更新,也可以在对象初始化阶段直接计算Age的数值:
const rajat = { FirstName: "Rajat", middleName: "Kumar", lastName: "sahoo", birthYear: 1998, Age: 2023 - 1998, // 直接计算赋值 location: "Bhubaneswar", job: "Programmer", friends: ["Michel", "Jack", "James", "Juile"], }; console.log(rajat.Age); // 输出25
内容的提问来源于stack exchange,提问作者Rajat kumar Sahoo
相关产品推荐
相关产品推荐

