继承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
相关产品推荐
相关产品推荐

