apply、call、bind區別、用法__javascript

來源:互聯網
上載者:User
apply和call都是為了改變某個函數運行時的上下文而存在的(就是為了 改變函數內部this的指向);
如果使用apply或call方法,那麼this指向他們的第一個參數,apply的第二個參數是一個參數數組,call的第二個及其以後的參數都是數組裡面的元素,就是說要全部列舉出來;
他們的 常用用法: 1.數組之間的追加; 2.擷取數組中的最大值和最小值,利用他們擴充範圍擁有Math的min和max方法; 由於沒有什麼對象調用這個方法,所以第一個參數可以寫作null或者本身; var  numbers = [5, 458 , 120 , -215 ]; 
var  maxInNumbers = Math.max.apply(Math, numbers),   //458        maxInNumbers = Math.max.call(Math,5, 458 , 120 , -215); //458 3.驗證是否是數組(前提是toString()方法沒有被重寫過) function   isArray(obj){ 
    return Object.prototype.toString.call(obj) === '[object Array]' ; } 4.讓類數組擁有數組的方法
比如arguments對象,擷取到的文檔節點等,並沒有數組的那些方法: Array.prototype.slice.apply(argument); //理論上來說這個比較快,直接在原型上尋找slice方法                                                                  //但實際上比較慢 或者 [].slice.apply(arguments); //理論上來說這個比較慢,因為要Array做一個執行個體化再尋找slice方法                                         //實際上比較快,因為現在的各種自動化工具會把上一種方法轉換為這種,而第二種代碼比較簡潔,所以會比較快;

bind()--也是改變函數體內this的指向; bind會建立一個新函數,稱為綁定函數,當調用這個函數的時候,綁定函數會以建立它時傳入bind()方法的第一個參數作為this,傳入bind()方法的第二個及以後的參數加上綁定函數運行時本身的參數按照順序作為原函數的參數來調用原函數;
bind與apply、call最大的區別就是:bind不會立即調用,其他兩個會立即調用 例子:

如果多次調用bind,那麼多出來的次數都是無效的,

三個的使用區別: 都是用來改變函數的this對象的指向的; 第一個參數都是this要指向的對象; 都可以利用後續參數傳參; bind是返回對應函數,便於稍後調用,apply、call是立即調用;










聯繫我們

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