这段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
相关产品推荐
相关产品推荐

