以前一直对new 过程this的指向问题很困惑,在现在供职公司的面试中也被问过,遗憾那时回答的不好,现在拜读了javascript神作《你不知道的Javascript》上卷,我才彻底理解了这过程
以下面代码过程为例:
以下面代码过程为例:
function VI() {
console.log(this)
debugger
this.a = 'jianfeng'
debugger
this.fu = function() {
console.log(this.a)
}
}为清楚的看到执行过程中this的变化,我特意打了两个断点。
现在来执行下
var ui = new VI()首先,你们看:
构造生成初始,this绑定到一个对象里,名为VI, 我为啥说它绑定到对象上,你看this有个__proto__属性啊,还说它的构造函数是VI()函数,妥妥对象啊。可见,new 过程中,系统为我们开辟了内存搞了个对象出来,这还不够直观?不过现在这个新建的对象还没啥自定义的属性啥的。再下一步:
现在这个新建的对象要添加个属性a啦,不过这句还没执行完,这个对象的属性还是undefinded,既然this绑定到这个对象上,自然this.a也是undefined。好的,继续下一步:
如图,这时候a属性已经添加到新对象上了,this.a的值也不为空了,继续下一步:
这步是想给新对象加个fu方法,这句还没执行完,fu方法还没挂上去,所以this.fu还是undefined,好,继续执行下一步
![]()
![]()
![]()
现在,这个新对象已经添加了fu方法,有个单词大家得认识下: anonymous ,意为匿名的,即这个fu方法是个匿名函数,this.fu为匿名函数,所以这里不用疑惑哈。继续下一步:
终于把新对象搞好了,是时候交付给甲方了,好的,新建变量ui, ui地址指向这个新对象的地址, 那以后ui就表示这个对象啦,完美完美。。。。不知这样说客官们觉得咋样呢