const cat = {
name: '小黑',
eatFish(...args) {
console.log('this指向=>',JSON.stringify(this));
console.log('...args',args);
console.log(this.name + '吃鱼');
}
}
const dog = {
name:'大毛',
eatBone(...args){
console.log('this指向=>',JSON.stringify(this));
console.log('...args',args);
console.log(this.name + '吃骨头');
}
}
console.log('=================call==================')
// 有一天大毛想吃鱼,可是不知道怎么吃,小黑说我喂你
cat.eatFish.call(dog,'汪汪汪','call')
// 猫要吃骨头
dog.eatBone.call(cat,'喵喵喵','call')
console.log('=================apply=================')
cat.eatFish.apply(dog,['汪汪汪','apply'])
dog.eatBone.apply(cat,['喵喵喵','apply'])
console.log('=====================bind================')
const test1 = cat.eatFish.bind(dog,'汪汪汪','bind')
test1()
/**
* 总结
* 1. 当我们使用一个函数需要改变this指向的时候,才会用到call/apply/bind
* 2. 如果你要传递的参数不多,则可以使用fn.call(thisObj,arg1,arg2...)
* 3. 参数多,则可以用数组将参数整理好使用fn.apply
* 4. 如果你想生成的一个新的函数长期绑定某个函数给某个对象,则用bind
*/
console