call、apply、bind

107 阅读1分钟

apply、call、bind都是函数的方法,用来改变函数中this的指向!!!

区别:

1、apply、call立即执行;bind只是创建了新函数实例,并不直接调用,需要加()去执行。

const age = 11 const student = { age: 18 } function sayAge () { console.log(this.age) } sayAge() // 11 sayAge.call(student) // 18 sayAge.apply(student) // 18 sayAge.bind(student)() // 18

2、传参方式不同,apply从第二个参数唯一,是一个arguments数组,call和bind从第二个参数开始,逐个添加参数

image.png call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了:

call 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔,直接放到后面 obj.myFun.call(db,'成都', ... ,'string' )。

apply 的所有参数都必须放在一个数组里面传进去 obj.myFun.apply(db,['成都', ..., 'string' ])。

bind 除了返回是函数以外,它 的参数和 call 一样。

当然,三者的参数不限定是 string 类型,允许是各种类型,包括函数 、 object 等等!