javascript 中的call 和apply的區別

來源:互聯網
上載者:User

標籤:

一直對call 和apply很模糊,今天終於搞懂了,分享出來給大家。

apply call bind方法

var ZS = {

  name:"張三",

  sex : "男",

  age : "25歲",

  say :function(){

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

  }

}

 

var LS = {

 

  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方法中一一對應的)

 

javascript 中的call 和apply的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.