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

继承BankAccount的SavingsAccount类调用方法后返回NaN问题

问题分析与解决方案

出现NaN的核心原因是账户余额未被正确初始化,或是子类构造逻辑未继承父类的初始化流程,导致balance变量为undefined,数值运算后得到无效的NaN结果。

正确实现代码

// 父类:基础银行账户
class BankAccount {
  constructor(initialBalance = 0) {
    this.balance = initialBalance; // 显式初始化余额,默认值设为0
  }

  deposit(amount) {
    // 校验金额合法性,避免非数字/负数干扰
    if (typeof amount === 'number' && amount > 0) {
      this.balance += amount;
    }
  }

  withdraw(amount) {
    if (typeof amount === 'number' && amount > 0 && amount <= this.balance) {
      this.balance -= amount;
    }
  }
}

// 子类:储蓄账户,继承基础账户
class SavingsAccount extends BankAccount {
  constructor(initialBalance = 0) {
    super(initialBalance); // 必须调用super初始化父类属性
    this.interestRate = 0.02; // 子类独有的利率属性
  }

  // 子类扩展方法:计算利息
  addInterest() {
    this.balance += this.balance * this.interestRate;
  }
}

// 测试实例
const janesAccount = new SavingsAccount();
janesAccount.deposit(2000);
console.log(janesAccount.balance); // 输出 2000

关键错误排查点

  • 余额未初始化:父类构造函数未给this.balance赋值,初始值为undefined,执行this.balance += amount时,undefined与数字运算会得到NaN。
  • 子类未调用super():若子类自定义构造函数,必须先调用super()触发父类的初始化逻辑,否则无法继承父类的balance属性。
  • 非法参数传入:如果deposit/withdraw传入非数字或负数,也会导致运算异常,建议添加参数校验逻辑。

内容的提问来源于stack exchange,提问作者Jefferson Chukwu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:34:59