凡塵:關於Apply、call、bind的詳解

來源:互聯網
上載者:User

標籤:對象   color   logs   argument   array   利用   rgs   部分   相同   

 call方法:

文法:call(thisObj,‘‘,‘‘........)定義:調用一個對象的一個方法,以另一個對象替換當前對象說明:call方法可以用來代替另一個對象調用一個方法。call方法可將一個函數的物件內容初始的上下文改變為由thisObj指定的新對象,如果沒有提供thisObj參數,那麼global對象被用做thisObj

apply方法:

文法:apply(thisObj,[‘‘,‘‘,‘‘....])定義:應用某一個對象的方法,用另一個對象替換當前對象如果argArray不是一個有效數組或者不是arguments對象,那麼將導致一個TypeError.如果沒有提供argArray和thisObj任何一個參數,那麼Global對象將用做thisObj,並且無法被傳遞任何參數

相同之處:

1、都是用來改變函數的this對象的指向2、第一個參數都是this要指向的對象3、都可以利用後續參數傳參不同之處:1、call和apply都是對函數的直接調用,而bind方法返回的仍然是一個函數,因此後面需要加上()來進行調用才可以

案例一:bind與call、apply的區別

var a={     name:‘阿姨請別把您閨女介紹給我‘,     sex:‘男‘,     age:‘24‘,     say:function(){          console.log(this.name+‘,今年‘+this.age+‘歲,性別‘+this.sex)     }}var b={     name:‘就要把閨女介紹給你‘,     sex:‘女‘,     age:‘18‘}a.say();//阿姨請別把您閨女介紹給我,今年24歲了,性別男那麼我們想一下如何讓b用say的方法顯示資料呢?用call方法:a.say.call(b)用apply方法:a.say.apply(b)用bind方法:a.say.bind(b)()

案例二:call與apply的區別

var a={     name:‘阿姨請不要把您閨女介紹給我‘,     sex:‘男‘,     age:‘18‘,     say:function(school,grade){          console.log(this.name+‘性別‘+this.sex+‘年齡‘+this.age+school+grade)     }}var b={     name:‘就喜歡把閨女介紹給你‘,     sex:‘女‘,     age:‘18‘}現在我們看say方法中多了兩個參數,我們通過call和apply的參數進行傳參用call方法:a.say.call(b,‘清華‘,‘三年級‘)用apply方法:a.say.apply(b,[‘清華‘,‘六年級‘])call後面的參數與say方法中是一一對應的,而apply第二個參數是一個數組用bind方法:a.say.bind(b,‘清華‘,‘三年級‘)但是由於bind返回的仍然是一個函數,所以我們可以在調用的時候在進行傳參a.say.bind(b)(‘清華‘,‘三年級‘)
由於IE6-IE8不支援該方法,所以若想在不同瀏覽器中使用所以我們要做下處理相容處理bind方式
if(!Function.prototype.bind){     Function.prototype.bind=function(obj){          var This=this;          var args=arguments;          return function(){               This.apply(obj,Array.prototype.slice.call(args,1))          }     }}

註:還有一些不完善的部分,還會持續更新。顯湊活著看!加油你們都是最棒的。麼麼噠!!!  另外大神可以指點不足之處

凡塵:關於Apply、call、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.