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

new构造函数创建对象与字面量对象的箭头函数方法差异

核心原因:箭头函数的this是定义时从外层词法作用域捕获,固定绑定不会随调用方式改变,二者的show方法定义时的外层作用域完全不同。


1. 实例a的show方法绑定逻辑

构造函数执行时的this默认指向new关键字创建的新实例:

function A(){
   // 构造函数内部this === 新创建的实例对象
   this.number = 10;
   // 箭头函数定义时,直接捕获外层作用域(即构造函数A的作用域)的this
   this.show = () => console.log(this.number)
}
let a = new A();

所以a的show方法里的this已经永久绑定到a实例,调用a.show()自然取到a.number = 10。

2. 字面量对象b的show方法绑定逻辑

对象字面量不会创建独立的词法作用域:

// 定义b的外层作用域是全局作用域(浏览器下为window,Node下为globalThis)
let b = {
   number: 20,
   // 箭头函数定义时,捕获外层的全局作用域的this,和b对象本身没有关系
   show: () => console.log(this.number)
}

全局作用域下没有定义number变量,因此b.show()输出undefined。如果提前给全局作用域添加number属性即可验证:

window.number = 30; // 浏览器环境下
b.show() // 输出30

补充误区说明

只有普通函数作为对象方法调用时,才会将this绑定到对象本身,这个规则对箭头函数完全不生效。如果把b的show改成普通函数,就会得到预期的20:

let b = {
   number: 20,
   show() {console.log(this.number)}
}
b.show() // 输出20

内容的提问来源于stack exchange,提问作者Yauheni Padvoiski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:36:03