javascript中的call(),apply(),bind()方法的區別

來源:互聯網
上載者:User

標籤:傳遞   display   name   匹配   結果   call()   傳參   spl   之間   

之前一直迷惑,記不住call(),apply(),bind()的區別。不知道如何使用,一直處於懵懂的狀態。直到有一天面試被問到了這三個方法的區別,所以覺得很有必要總結一下。

如果有不全面的地方,後續再進行補充。

1. 改變this的指向
var obj = {    name : ‘張三‘,    age : 17,    myFun : function () {        console.log(this.name + ‘ ‘ + this.age);    }}var obj2 = {    name : ‘李四‘,    age : 20}obj.myFun() //張三 17obj.myFun.apply(obj2) //李四 20obj.myFun.call(obj2) //李四 20obj.myFun.bind(obj2)() //李四 20

由例子可以看出,apply,call,bind都對this進行了重新導向,apply和call使用方法相同。但是bind後面多了個(),因為bind返回的是一個全新的函數,但是三個返回結果一致。

2. 傳參情況不同
var obj = {    name : ‘張三‘,    age : 17,    myFun : function (active,fm) {        console.log(this.name + ‘ ‘ + this.age + active + fm);    }}var obj2 = {    name : ‘李四‘,    age : 20}obj.myFun.apply(obj2,[‘愛學習‘,‘北京‘]); //李四 20愛學習北京obj.myFun.call(obj2,‘愛學習‘,‘北京‘); //李四 20愛學習北京obj.myFun.bind(obj2,‘愛學習‘,‘北京‘)(); //李四 20愛學習北京obj.myFun.call(obj2,[‘愛學習‘,‘北京‘])();//李四 20愛學習,北京undefined

可以發現:apply參數傳遞用數組,並且在方法中會自動匹配參數

                  call參數傳遞是直接放進去,每個參數之間用逗號隔開

                  apply如果用和call類似的傳遞參數的方法,則在方法中會自動匹配參數。若像apply一樣傳遞參數,則會把整個數組                       當作一個參數傳遞進去。

javascript中的call(),apply(),bind()方法的區別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.