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

JavaScript类中'this'绑定疑问:为何this.wrap(3)可正常赋值?

为什么类中this.wrap(3)里的this能正常指向实例?

你的困惑核心在于对类实例字段的初始化时机理解有误,下面一步步拆解代码的执行逻辑:

  • 当执行new Test()时,JavaScript引擎会先创建一个空对象,将它的原型指向Test.prototype,这个对象就是此时的this——也就是说,在实例字段初始化时,this已经指向了正在创建的实例,并非“没有值”。
  • 类的实例字段(比如x = 1、howDoesThisWork = this.wrap(3))会按照定义顺序,在构造函数执行阶段依次初始化:
    1. 首先执行this.x = 1,给实例设置x属性;
    2. 接着执行this.wrap(3):这里的this指向当前正在创建的实例,而wrap是类的原型方法,实例可以通过原型链访问到该方法,所以能正常调用;
    3. wrap方法返回一个箭头函数,箭头函数的this是词法绑定的——它会捕获调用wrap时的this(也就是正在创建的Test实例);
    4. 最后把这个箭头函数赋值给this.howDoesThisWork,成为实例的一个属性。

当你调用t.howDoesThisWork()时,箭头函数里的this依然指向t,所以this.addX(i)能正确访问t.x,算出3 + 1 = 4。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:28:22