ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 2.1函数内this的指向 这些this的指向,是当我们调用函数的时候确定的。调用方式的不同决定了 this的指向不同 一般指向我们的调用者. | 调用方式 | this指向 | | --- | --- | | 普通函数调用 | window | | 构造函数调用 | 实例对象原型对象里面的方法也指向实例对象 | | 对象方法调用 | 该方法所属对象 | | 事件绑定方法 | 绑定事件对象 | | 定时器函数 | window | | 立即执行函数 | window | # 2.1改变函数内部this指向 JavaScript为我们专\]提供了一些函数方法来帮我们更优雅的处理函数内部 this 的指向问题,常用的有**bind()、call()、apply()**三种方法。 ## 1.call方法 call()方法调用一个**对象**。 简单理解为调用函数的方式,但是它可以改变函数的this指向。 ~~~ fun.call (thisArg, arg1, arg2, .. .) ~~~ ![](https://img.kancloud.cn/fb/44/fb44103d2cb96ed36992a12f3e065160_945x488.png) ## 2.apply方法 apply()方法**调用**一个函数。简单理解为调用函数的方式,但是它可以改变函数的this指向。 ~~~ fun.apply (thisArg, [argsArray]) ~~~ ●thisArg :在fun函数运行时指定的this值 ●argsArray :传递的值,必须包含在**数组**里面 ●返回值就是函数的返回值,因为它就是调用函数 ![](https://img.kancloud.cn/bf/23/bf238b2c3d7a5528fbfeb6b28b4577ed_999x709.png) ## 3.bind方法 (开发常用) (返回this 修改后的新函数) bind()方法**不会调用函数**。但是能改变函数内部this 指向 ~~~ fun.bind (thisArg, arg1, arg2, .. .) ~~~ ●thisArg :在fun函数运行时指定的this值 ●arg1 , arg2:传递的其他参数 ●返回由指定的this值和初始化参数改造的**原函数拷贝** ![](https://img.kancloud.cn/aa/34/aa34fe38446c230ee70247fd75d3a8a0_879x534.png) [//3.如果有的函数我们不需要立即调用](https://3.xn--ihqzus7e2xbqzowynuwfpsd1rbc54fgedusr1s0c4lhq36b/),但是又想改变这个函数内部的this指向此时用bind // 4.我们有一个按钮,当我们点击了之后,就禁用这个按钮,3秒钟之后开启这个按钮 ![](https://img.kancloud.cn/47/17/47171e9952327899af2ad2f1c959cfdf_1089x680.png) # 2.2 call apply bind 总结 ### 相同点: 都可以**改变函数内部的this指向**. ### 区别点: 1. call和apply会调用函数并且改变函数内部this指向. 2. call 和apply传递的参数不一样,**call传递参数**aru1, aru..形式**apply**必须**数组**形式\[arg\] 3. **bind****不会调用函数**,可以**改变函数内部this指向**. ### 主要应用场景: 1. **call**经常做**继承**. 2. **apply**经常跟**数组**有关系.比如借助于数学对象实现数组最大值最小值 3. **bind****不调用函数**但是还想**改变this指向**.比如**改变定时器内部的this指向**.