如何改变this指向?

如何改变this指向?

在接触this指向问题,相信很多同学都面临this指向的问题,有些时候我们在对象方法内部使用this。而并不想让this指向当前本对象,这时候该怎么办呢?答案就是改变this指向,该如何改变this指向呢,请往下看。

①:call()方法可以在调用时改变this指向


案例call方法代码片段

可以看出我们再调用obj里面的say方法的时候调用使用了一个call方法,将this指向改变到了window,也就是全局。所以当调用say方法会打印外部的x,也就是2。我们又在调用时向函数内部传入了一个参数,所以函数内部的this.x就是2传入一个2所以sum的值就是4

call()方法的具体用法

call()方法是在调用时改变this指向,括号内部的第一个参数是要指向的对象,第二个参数是调用函数的实参,如果有多个参数就依次在后面传入

②:apply()方法可以在调用时改变this指向


案例apply方法代码片段

两种方式都可以改变this指向,不同的地方是call和apply传参方式不同,apply给函数传参是以一个集合的形式传入,如果是多个参数,就在集合内部依次写入

③bind()方法可以在定义时改变this指向


案例bind方法代码片段

bind()和call()传参方式相同,但是何时改变this指向不同。bind()方法是在定义时改变this指向。如上代码所示,定义obj2的时候将obj里的say的方法赋给给了obj2,此时obj2就是一个函数。因为暴露在全局,所以obj2的this是指向window也就是2.我们要让obj2也指向obj。就在赋值的时候bind一下,此时在调用obj2。打印结果就是1 指向了obj。

总结:

①:改变this指向常用的三个方法:call(),apply(),bind();要注意谁是在调用时改变this指向,谁是在定义时改变this指向

②:就是参数问题,apply第二个参数就以一个集合形式传入,而call和apply都是依次传入

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

相关阅读更多精彩内容

友情链接更多精彩内容