首先call、apply、bind的作用都是改变函数运行时this的指向。其次,在 [ES6] 的箭头函数下, call 和 apply、bind 将失效。
call方法第一个参数要绑定给this的值,后面传入的是一个参数列表,当第一个参数为null、undefined的时候,默认指window.
fun.call(obj.'a','b')
apply接受两个参数,第一个参数要绑定给this的值,第二个参数是一个参数数组.当第一个参数为null、undefined的时候,默认指向window.
fun.apply(obj,['a','b'])
bind 接受两个参数,第一个参数是要绑定给this的值,第二个参数是一个参数数组,这一点与apply相同。
共同点
都可以改变this指向
不同点:
call 和 apply会调用函数,并且改变函数内部的this指向
call 和 apply传递的参数不一样,call传递参数使用逗号隔开,apply使用数组传递bind不会调用函数,可以改变函数内部this指向
应用场景
1.call 经常做继承
2.apply经常跟数组有关系,比如借助数学对象实现数组最大值、最小值
3.bind不掉用函数,但是还想改变this指向,比如改变定制器内部的this指向