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

这段JavaScript代码存在什么问题?运行后输出undefined如何排查

问题排查结果
  • 问题根源是calcBMI方法使用了箭头函数:箭头函数没有独立的this绑定,它的this会继承定义位置外层作用域的this,而非指向调用该方法的john对象。
  • 全局作用域下不存在mass和height属性,所以计算结果为NaN,且赋值的bmi属性也挂载到了全局对象上,john对象本身没有bmi属性,打印时自然输出undefined。
修复方案

将箭头函数替换为普通函数即可,普通函数作为对象方法被调用时,this会自动绑定到调用它的实例对象:

const john = { 
  fullName: 'johny Rodes', 
  mass: 92, 
  height: 1.95, 
  // 写法1:普通函数表达式
  calcBMI: function() { 
    this.bmi = this.mass / this.height ** 2; 
    return this.bmi; 
  }
  // 写法2:ES6对象方法简写(更推荐)
  // calcBMI() { 
  //   this.bmi = this.mass / this.height ** 2; 
  //   return this.bmi; 
  // }
};
john.calcBMI();
console.log(john.bmi); // 输出结果约为24.19

内容的提问来源于stack exchange,提问作者Good Enough

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:06:03