call,apply,bind

call,apply,bind都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的因为属于Function.prototype,所以每个Function对象实例,也就是每个方法都有call, apply,bind属性.既然作为方法的属性,那它们的使用就当然是针对方法的了.这三个方法是容易混淆的,因为它们的作用一样,只是使用方式不同。

 

  1. 这三者都是用来改变函数的this对象的指向的。
  2. 第一个参数都是this要指向的对象。
  3. 都可以利用后续参数传参。

 

var jianbing = {
    name:  "AbingGo",
    say:  function(company, address){
        console.log(this.name, company, address);
    }
}
var ty = {
    name:  "ty19105"
}

jianbing.say('Qihoo360', 'beijing');  // AbingGo Qihoo360 beijing

 


// call 方法
jianbing.say.call(ty, 'Qihoo360', 'beijing');  // ty19105 Qihoo360 beijing

 


// apply 方法
jianbing.say.apply(ty, ['Qihoo360', 'beijing']);  // ty19105 Qihoo360 beijing

 


// bind 方法的的两种传参方式

jianbing.say.bind(ty)('Qihoo360', 'beijing');    // ty19105 Qihoo360 beijing

jianbing.say.bind(ty, 'Qihoo360', 'beijing')();  // ty19105 Qihoo360 beijing

 

bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。

call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以。三者之间的区别与联系一目了然。

发表评论