call,apply,bind三个办法都是用来扭转this指向的
call与appl会立即调用函数,bind不会立即调用函数,而是把一个函数作为返回值返回
一:call()函数,第一个参数为this行将指向的对象,第二个是可能要传的参数
举个栗子
let obj1 = { name:"Jimmy", age:15, sayHi(){ console.log("Nice to meet you,my name is "+this.name) }, eat(food,drink){ console.log(this.name+" like eat "+food+" "+drink) }}let obj2 = { name:"Harry", age:16 }obj1.sayHi.call(obj2)//Nice to meet you,my name is Harryobj1.eat.call(obj2,"pizza","cola")//Harry like eat pizza cola
sayHi()办法的this,通过call指向了obj2
eat()办法的this,通过call指向了obj2,并且传递了两个参数"pizza","cola"
二:apply函数,和call简直截然不同,只需把"pizza","cola"两个参数以数组模式传递即可
obj1.eat.apply(obj2,["pizza","cola"])//Harry like eat pizza cola
三: bind()函数,和call也是简直截然不同,不同的是,bind会返回一个函数,才能够应用
let fun = obj1.eat.apply(obj2,"pizza","cola")fun()
总结:call,apply会立刻执行,bind不会