call apply 与 bind三者区别

164 阅读1分钟

一、call,apply,bind的相同点:

  • 都是改变this指向的;
  • 第一个参数都是this要指向的对象;
  • 都可以利用后续参数传参;

二、call,apply,bind的区别:

  • call和bind的参数是依次传参,一一对应的;
  • 但apply只有两个参数,第二个参数为[数组]
  • call和apply都是对函数进行直接调用,而bind方法返回的仍是一个函数;
```例如:
var a ={
    name:'一一',
    age:'22',
    sex:'女',
    hobby:'写代码'
    say:function(sex,hobby) {         
        console.log(this.name,this.age,sex,hobby)      
    }
}
var b = {
    name:'二二',
    age:'23',
}
a.say.call(b,'男','学习');
a.say.apply(b,['男','学习'])
bind可以向call一样传参:
例如:
a.say.bind(b,'男','学习')();
但由于bind返回的仍然是一个函数,所以我们还可以在调用的时候再进行传参。
例如:
a.say.bind(b)('男','学习');
//结果为:"二二","23","男","学习"