淺談call , apply ,bind 的 差異

來源:互聯網
上載者:User

標籤:pre   func   返回   cti   個數   私人屬性   就會   例子   改變   

---恢複內容開始---

//首先這三個的根本作用都是改變this的指向,這個你必須明確先說call//首先用單列模式聲明一個對象;裡面有個fn的方法,很簡單,就是返回a裡面的name;        var a = {name : ‘極速代碼‘,fn:function(){return this.name;}  };a.fn()       //-->輸出是 ‘極速代碼’ ,這個毫無疑問;var b = a.fn;      //聲明一個對象b;讓他等於a裡面的這個fn方法;b();       //那麼這時候如果我們執行b();就會提示b這個方法不存在 b is not a function;為什嗎?原因是這樣的,name這個屬性是在a裡面的,a執行的時候this就是a本身,所以可以調用,而b()執行,這裡面的this就變成了b,所以無法調用a下面的name,所以我們要做的就是改變b方法執行的時候this的指向,讓它指向a,這麼做b.call(a)-->輸出 ‘極速代碼‘  再舉個例子,大家肯定更加明白;聲明對象a,b,他們裡面都有一個叫name 的私人屬性;   var a = {name : ‘極速代碼‘,fn:function(){return this.name;}  };var  b = {name:‘極速個啥‘}b.fn = a.fn//讓b裡面也有a裡面的fn;b.fn() //--->輸出的是 ‘極速個啥‘b.fn.call(a)-->輸出的是‘極速代碼’因為現在的this是指向a了。所以找到的是a裡面的name屬性;apply 跟call基本相似,只是apply只能最多傳2個參,第一個是this指向,第二個是一個數組;看例子:改變this指向跟call一樣,下面就說他們傳參的區別 var a = {name:‘極速代碼‘,fn:function(n,m){return this.name + n+m ;}  };a.fn(1,3) //--輸出 ‘’極速代碼4‘’;這沒問題var b = a.fn;b(1,3)  // 提示b is not a function,因為沒有改變this指向;b.apply(a,[1,3]) //-->輸出極速代碼4;b.call(a,1,3) // -->輸出極速代碼4;這兩個大家靈活運用,如果需要傳參是一個數組,或者很多就可以用apply;另外一點就是如果第一個參數沒有傳或者傳個null,this預設指向windowvar name = ‘極速代碼,極速個啥‘  var a = {name:‘極速代碼‘,fn:function(n,m){return this.name + n+m ;} }  var b = a.fn  b.call(null,1,3) //-->輸出"極速代碼,極速個啥13"this.指向了window,自然找的name是全域環境下的name;bind 也是改變this指向,跟call,apply有明星區別,bind顧名思義,就是把this指向改變,然後綁定,但沒有執行,看例子;var a = {name:‘極速代碼‘,fn:function(n,m){return this.name + n+m ;}  };var b = a.fn;b.bind(a,1,3); //沒有輸出任何東西;因為只是改變了this指向,並沒有執行函數,b.bind(a,1,3)(); //輸出 ‘極速代碼13’到這裡相信大家對這三者有了一定的瞭解,一定要從本質上瞭解他們。

---恢複內容結束---

淺談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.