You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:22:54