作用于一个函数或者对象的方法
call 召唤过来
apply 提供给
bind 绑定
在call方法中,是把参数放进去依次传递,参数可以有多个;在apply方法中,是把参数放在一个数组中传递,所以参数只有两个;
所以当你不知道参数数量时,就使用apply方法,先把参数push进一个数组里,然后再进行传递,
当知道参数数量时,用call和apply都可以;
obj1.a.call(obj2,name,age)
obj1.a.apply(obj2,[name,age])
let obj1={
name:“john1”,
say:function(){
console.log(this.name)//john2 原本this指向的是obj1,但是这里使用call把obj2召唤过来使用,
让其指向call的第一个参数,这里this指向了obj2
console.log(this)//{name: “john2”}
}
}
let obj2={
name:“john2”
}
obj1.say.call(obj2)
obj1.say.apply(obj2)//把obj2的属性提供给obj1使用。
obj1.name.apply(obj2)//obj1.name.apply is not a function,这种写法不行;
obj1.say.bind(obj2)();//前一个是绑定,后边一个()是执行;