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

为何JavaScript中myTodos.meetDone()函数返回NaN?

问题分析与修复方案

嘿,我来帮你捋捋这个导致meetDone()返回NaN的问题,顺便把代码里的其他小问题也一起修正了~

核心问题:属性与函数名重复定义

你在myTodos对象里先声明了meetDone: 0这个数值属性,后面又把meetDone重新定义成了函数。在JavaScript对象中,后定义的属性会直接覆盖前面的,所以当你在meetDone函数里执行this.meetDone = this.meetDone - num时,这里的this.meetDone一开始指向的是函数本身,函数和数字做减法运算自然会得到NaN。

次要问题:report函数语法与逻辑错误

你的report函数里模板字符串没写完(缺少闭合反引号和完整变量),而且计算剩余会议的逻辑也不对——剩余会议应该是总会议数减去已完成的,不是相加。

修正后的完整代码

let myTodos = {
  day: 'Monday',
  meetings: 0,
  meetDone: 0,
  addMeeting: function (num) {
    this.meetings = this.meetings + num;
  },
  // 把函数名改成completeMeeting,避免和属性名冲突
  completeMeeting: function (num) {
    this.meetDone = this.meetDone + num; // 完成会议应该累加数量,原代码的减法逻辑不符合常理
  },
  resetDay: function () {
    this.meetings = 0;
    this.meetDone = 0;
  },
  report: function () {
    let meetLeft = this.meetings - this.meetDone; // 修正剩余会议计算逻辑
    return `You have ${meetLeft} meetings left today!`;
  }
};

// 测试示例
myTodos.addMeeting(5);
myTodos.completeMeeting(2);
console.log(myTodos.report()); // 输出:You have 3 meetings left today!
console.log(myTodos.meetDone); // 输出:2,不再是NaN

额外说明

如果你的原意是用meetDone函数来减少待完成会议数(比如取消会议),那可以把函数逻辑改成this.meetings = this.meetings - num,但无论如何,都要避免属性名和函数名重复,这是导致NaN的根本原因。

内容的提问来源于stack exchange,提问作者Amir Meimari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:00:13