call、apply、bind三者的区别

83 阅读1分钟

首先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指向

不同点:

callapply会调用函数,并且改变函数内部的this指向

callapply传递的参数不一样,call传递参数使用逗号隔开,apply使用数组传递bind不会调用函数,可以改变函数内部this指向

应用场景

1.call 经常做继承 2.apply经常跟数组有关系,比如借助数学对象实现数组最大值、最小值 3.bind不掉用函数,但是还想改变this指向,比如改变定制器内部的this指向