首先apply、call、bind中,bind是不会执行原函数的,但apply、call会执行原函数。可以看下底下这个简单的代码,然后执行下就会明白了。
var obj1 = {
name:"obj1",
getName(){
console.log(this.name)
}
}
var obj2 = {
name:"obj2",
getName(){
console.log(this.name)
}
}
// this指向的是,谁调用我,我就指向谁
obj1.getName() // 运行结果为obj1
// call、apply这个方法,是改变getName前面这个方法的this指向,而且能够立即执行这个方法
// call、bind是可以传n个参数,但apply传参的话,第二数只能接受一个数组
obj1.getName.call(obj2,"111","222","3333") // obj2
obj1.getName.apply(obj2,["111","222","333"]) // obj2
//bind这个方法只是相当于把getName这个方法里面的this指向obj2,但是不会立即执行这个方法,需要自己手动去执行,加上()就是执行这方法
obj1.getName.bind(obj2) // 不显示
obj1.getName.bind(obj2,"111","222","333")() // obj2