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从第二个参数开始,逐个添加参数
call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了:
call 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔,直接放到后面 obj.myFun.call(db,'成都', ... ,'string' )。
apply 的所有参数都必须放在一个数组里面传进去 obj.myFun.apply(db,['成都', ..., 'string' ])。
bind 除了返回是函数以外,它 的参数和 call 一样。
当然,三者的参数不限定是 string 类型,允许是各种类型,包括函数 、 object 等等!