JavaScript类中'this'绑定疑问:为何this.wrap(3)可正常赋值?
为什么类中
this.wrap(3)里的this能正常指向实例? 你的困惑核心在于对类实例字段的初始化时机理解有误,下面一步步拆解代码的执行逻辑:
- 当执行
new Test()时,JavaScript引擎会先创建一个空对象,将它的原型指向Test.prototype,这个对象就是此时的this——也就是说,在实例字段初始化时,this已经指向了正在创建的实例,并非“没有值”。 - 类的实例字段(比如
x = 1、howDoesThisWork = this.wrap(3))会按照定义顺序,在构造函数执行阶段依次初始化:- 首先执行
this.x = 1,给实例设置x属性; - 接着执行
this.wrap(3):这里的this指向当前正在创建的实例,而wrap是类的原型方法,实例可以通过原型链访问到该方法,所以能正常调用; wrap方法返回一个箭头函数,箭头函数的this是词法绑定的——它会捕获调用wrap时的this(也就是正在创建的Test实例);- 最后把这个箭头函数赋值给
this.howDoesThisWork,成为实例的一个属性。
- 首先执行
当你调用t.howDoesThisWork()时,箭头函数里的this依然指向t,所以this.addX(i)能正确访问t.x,算出3 + 1 = 4。
内容的提问来源于stack exchange,提问作者bgoosman
相关产品推荐
相关产品推荐

