apply、call、bind函数的区别
apply、call、bind函数的区别
一、前言
大多数人都知道,使用apply、call、bind可以调用函数,并改变函数中this
的指向。
做一个简单记录,免得以后忘记了。
二、apply
-
使用:
函数.apply(obj, arg[])
-
参数:
- 第一个参数为函数中
this
指向的对象 - 第二个参数是函数中原本的参数,由数组进行封装
- 第一个参数为函数中
1 | JAVASCRIPT |
三、call
-
使用:
函数.call(obj, args...)
-
参数:第一个参数为函数中
this
指向的对象,后面的参数跟着原本的函数就好,加在后面就行
1 | JAVASCRIPT |
四、bind
bind
和前面两个有所不同,先看示例,一会再讲使用
1 | JAVASCRIPT |
可以看到,bind
在使用的时候会返回一个改变this
的新函数,使用需要重新调用这个新函数才行。
传参和call
一致,在后面添加原函数的参数就可以
1 | JAVASCRIPT |
五、总结
上面对比,总结一下apply
、call
、bind
他们的异同点
-
相同点:都可以改变函数中
this
的指向,且都将作为第一个参数进行使用 -
不同点(传参方面)
- apply:在传入改变
this
的对象之后,将原来的函数参数,打包成一个数组进行传参 - call:在传入改变
this
的对象之后,依次传入原本的函数参数 - bind:由于特性,它的传参分为一次参数和二次传参,一次传参与
call
相同;二次传参首次传参与call
类似,后一次调用传参补全原函数剩余的参数
- apply:在传入改变
-
不同点(调用方面)
- apply、call:
函数.apply()
或者函数.call()
,即可发起调用 - bind:先返回一个改变指向的函数,再通过这个函数进行调用
- apply、call:
我是半月,祝你幸福!!!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 半月无霜!
评论
ValineDisqus