(如何改变this指向)call&&apply&&bind之间的区别

相信看到这篇文章的小伙伴在学习前端的过程中遇到了this指向的难题

首先我们先看以下两幅图


大家想一下23,24,25行打印的是什么呢


第33行打印的又是什么呢

答案是:


33行打印的是‘小新’

比较一下这两者 this 的差别,第一张图的19行打印里面的 this 指向 obj,其他指向的是window,第二张图全局声明的fn() 函数 this也 是 window ;小伙伴门有没有答对呢,每答对的先去学习this指向问题哦

好了,言归正传!!

1,call()、apply()、bind() 都是用来重定义 this 这个对象的!

例:

d

既然说call()、apply()、bind()  都是来重新定义this的那么他们的区别在哪里呢

就从以上打印出来的结论来看除了bind方法后面多了一个()外,返回的结果都一致

由此得出结论,bind 返回的是一个新的函数,你必须调用它才会被执行。

apply() 与call()作用完全一样,只是接受参数的方式不太一样。例如,有一个函数定义如下:

            var fn = function(arg1,arg2) { 

                   };

    fn.call(this, arg1, arg2);

    fn.apply(this, [arg1, arg2])

其中 this 可以是任何一个 JavaScript 对象(JavaScript 中一切皆对象),call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。

由此可见:apply 、 call 、bind 

都是用来改变函数的this对象的指向的;

第一个参数都是this要指向的对象,也就是想指定的上下文;

三者都可以利用后续参数传参;

其中 bind 是返回对应函数,只是改变指向而不执行函数;apply 、call 则是立即调用 。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容