javascript 中的call 和apply的區別

一直對call 和apply很模糊,今天終於搞懂了,分享出來給你們。前端

apply call bind方法

var ZS = {web

  name:"張三",canvas

  sex : "男",數組

  age : "25歲",前端工程師

  say :function(){app

       console.log(this.name+","+this.sex+",今年"+this.age)函數

  }this

}

spa

 

var LS = {it

 

  name:"李四",

 

  sex : "女",

 

  age : "28歲"

 

}

ZS.say();  // 張三,男,今年25歲

張三有個say 方法,能夠console個人我的信息 。

如何用張三的say方法顯示李四的我的信息呢?

ZS.say.apply(LS);  // 李四,女,今年28歲

ZS.say.call(LS);  // 李四,女,今年28歲

ZS.say.bind(LS)();  // 李四,女,今年28歲

 

!注意 張三並無把say給李四,李四根本沒有say方法。

若是直接寫xw.say.bind(xh)是不會有任何結果的,看到區別了嗎?

call和apply都是對函數的直接調用,而bind方法返回的仍然是一個函數,所以後面還須要()來進行調用才能夠。

 

call 和apply的區別

var WW = {

  name:"王五",

  sex : "男",

  age : "30歲",

  say :function(company,position){

       console.log(this.name+","+this.sex+",今年"+this.age+",目前就任於"+company+",職位是:"+position);

  }

}

 

var ZL = {

  name:"趙六",

  sex : "女",

  age : "33歲"

}

 

WW.say("阿里","web前端工程師");  //王五,男,今年30歲,目前就任於阿里, 職位是:web前端工程師

經過call和apply讓趙六也能夠用這個say方法

 

WW.say.call(ZL,"百度","canvas工程師");  // 趙六,女,今年33歲,目前就任於百度,職位是:canvas工程師(call後面的參數與say方法中是一一對應的);

WW.say.call(ZL,"百度",["百度","canvas工程師"]);  // 趙六,女,今年33歲,目前就任於百度,職位是:canvas工程師(apply的第二個參數是一個數組,數組中的元素是和say方法中一一對應的)

相關文章
相關標籤/搜索