关于js中的this指向解析

        刚开始很多人学习编程的时候,大多人使用的是命令式编程或者面向,这种模式易于理解,但是对于一些复杂系统来说,面向对象编程更具有优势。面向对象编程总的来说是建立对象思想,这个对象里面集成了属性,方法,提供了一个作用域this,然后可以通过this拿到对象在某个时刻的属性值或者方法。所以清楚的认识this是每个程序员必备的技能包,话不多说我们通过几种this的使用来探究this的指向问题(非严格模式下):

        1:this在函数中的使用

        相信大家都听过关于函数的this指向是谁调用该函数this就指向谁,这句话基本没有错,但是和实际情况又有点不同,我们先来说说他的符合部分:

        附上代码

图片1
图片2

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

    附上代码


图片3


图片4

    由图片4的结果可以在对象中定义的函数属性不管嵌套多少层调用,this指向离他最近的上一层,即通过bigObj来调用obj的方法时,在js的运行机制里面解读为obj的直接调用。

现在我们再次探讨一下在函数中的函数自调用,this的指向又是什么样的结果,

附上代码


图5


图6

结果可见函数内部的函数自调用时,其实相当于在全局调用,this的指向依旧是全局window;

2:this在构造函数中的使用

附上代码


图片7


图片8

以上结果可见对于构造函数来说this的指向是该构造函数的实例

另外js还提供了改变this指向的3种方法call ,apply,bind,通过函数调用

附上代码


图片9


图片10

对于call,apply,bind的调用规则大致都是一样的,但是还是有些许的不同

call和apply的不同点在于,apply传参的是一个数组,而bind返回的是一个回调函数,需要得到结果需要再次调用,,,

以上为个人学习文档,有错误之处,还望指点~

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容