SOURCE

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 命令行工具 X clear

                    
>
console