刚开始很多人学习编程的时候,大多人使用的是命令式编程或者面向,这种模式易于理解,但是对于一些复杂系统来说,面向对象编程更具有优势。面向对象编程总的来说是建立对象思想,这个对象里面集成了属性,方法,提供了一个作用域this,然后可以通过this拿到对象在某个时刻的属性值或者方法。所以清楚的认识this是每个程序员必备的技能包,话不多说我们通过几种this的使用来探究this的指向问题(非严格模式下):
1:this在函数中的使用
相信大家都听过关于函数的this指向是谁调用该函数this就指向谁,这句话基本没有错,但是和实际情况又有点不同,我们先来说说他的符合部分:
附上代码


的确通过全局调用function a,this指向全局window,this.user引用的也是全局的user变量,符合谁调用指向谁,但是大多数时候因为面向对象编程,所以函数会被坐位一个属性封装在对象中,那么在对象中函数的this我们也可以来探究:
附上代码


由图片4的结果可以在对象中定义的函数属性不管嵌套多少层调用,this指向离他最近的上一层,即通过bigObj来调用obj的方法时,在js的运行机制里面解读为obj的直接调用。
现在我们再次探讨一下在函数中的函数自调用,this的指向又是什么样的结果,
附上代码


结果可见函数内部的函数自调用时,其实相当于在全局调用,this的指向依旧是全局window;
2:this在构造函数中的使用
附上代码


以上结果可见对于构造函数来说this的指向是该构造函数的实例
另外js还提供了改变this指向的3种方法call ,apply,bind,通过函数调用
附上代码


对于call,apply,bind的调用规则大致都是一样的,但是还是有些许的不同
call和apply的不同点在于,apply传参的是一个数组,而bind返回的是一个回调函数,需要得到结果需要再次调用,,,
以上为个人学习文档,有错误之处,还望指点~