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

JavaScript OOP代码执行结果不符,疑与this关键字更新有关

问题原因及解决方法

你的问题和JavaScript版本更新无关,核心是箭头函数的this绑定规则和普通函数完全不同:

  • 对象中的箭头函数不会将this绑定到当前对象,而是捕获外层词法作用域的this(浏览器环境下是window,Node环境下是globalThis)。全局作用域中不存在hasDiscount属性,所以this.hasDiscount结果为undefined,转成布尔值是false,导致两次输出都是"You Don't Have Discount"。
  • 讲师的代码实际用的是普通函数而非箭头函数,普通函数作为对象方法调用时,this会指向调用它的对象。

修正后的代码:

let obj = {
  hasDiscount: true,
  // 改用普通函数写法
  showMsg: function() {
    return `You${this.hasDiscount ? '' : " Don't"} Have Discount`
  }
  // 也可以用ES6方法简写:
  // showMsg() {
  //   return `You${this.hasDiscount ? '' : " Don't"} Have Discount`
  // }
}

console.log(obj.showMsg()) // 输出:You Have Discount

let newOne = Object.create(obj);
newOne.hasDiscount = false;
console.log(newOne.showMsg()) // 输出:You Don't Have Discount

修改后,调用obj.showMsg()时this指向obj,调用newOne.showMsg()时this指向newOne,就能得到预期结果。

内容的提问来源于stack exchange,提问作者Yassen Mohamed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:42:41