1.call()、apply()、bind() 都是用来重定义 this 这个对象的!

将this的指向改指为括号里的方法的this,传的参数是要改变this指向函数的传参

2.带参数的不同

  1. //'成都','上海'都是传入myfun里
  2. obj.myFun.call(db,'成都','上海');    
  3. obj.myFun.apply(db,['成都','上海']); //传参需要数组
  4. obj.myFun.bind(db,'成都','上海')(); //返回值是函数需要加()手动调用

3.call()和apply()功能相同,区别只是传参的不同,apply用的是数组,call一个一个对应传入,就是传入参数队列

  1. obj.myFun.call(db,'成都','上海');    
  2. obj.myFun.apply(db,['成都','上海']);
  3. 函数被callapply就改变了就立即调用

4,bind的区别

  1. 1.但函数运行bind时,会首先创建一个新方法不会立即调用
  2. 2.当这个新函数被调用时,bind() 的第一个参数将作为它运行时的 this, 新函数的调用和原来函数的调用一模一样,除了this的指向不一样之外
  3. 3.示例:
  4. function say(provice, city) {
  5. console.log('this=', this);
  6. console.log(`我来自${provice}${city}`);
  7. console.log(`我叫${this.username},今年${this.age}岁`);
  8. }
  9. // 2. 创建一个对象
  10. var person = {
  11. username: '老胡',
  12. age: 100
  13. };
  14. // 3. 使用bind的方法创建一个新函数
  15. say.bind(person)('湖南','长沙');

5.总结

  1. 1.call()、apply()、bind()的区别说一说?
  2. ·首先这三个方法都是为了改变this的指向,
  3. ·callapply的区别就是,call接受的是一系列参数,而apply接受的是一个数组,
  4. ·callapply的返回值是对应函数的返回值,bind返回的是一个新函数需要在bind后加()调用,