利用apply()或者rest參數來實現用數組傳遞函數參數

關於call()和apply()的用法,MDN文檔裏寫的很是清晰明白,在這裏就很少作記錄了。git

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/calles6

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/applygithub

雖然說了解了call()和apply()的做用,可是一直沒有怎麼碰見適用的場景,直到最近經常碰見須要將函數多個參數以數組的形式傳入,所以才瞭解到了apply()的一個適用場景。數組

由於apply在修改this指向的同時,還可以用數組傳入參數,這剛好就爲我這個場景需求打開了新思路。app

現舉例以下函數

var arr = [1, 2, 3];

var obj = {
  func: function (arg1, arg2, arg3) {
    return arg1 + arg2 + arg3;
  }
}

obj.func.apply(obj.func, arr);  // 6

apply保持了原this指向,只是利用它能夠用數組傳參的特性而已。this


用es6實現:rest

順便一提,在es6中有關於函數的拓展中加入了rest參數,剛好也解決了這種場景。我在這裏也放出一段示例代碼。code

const arr = [1, 2, 3];

const obj = {
  func(arg1, arg2, arg3) {
    return arg1 + arg2 + arg3;
  }
}

obj.func(...arr);

關於rest參數的資料 阮一峯先生開源的書是最好的教程,我在這裏也就把連接貼出來好了blog

http://es6.ruanyifeng.com/#docs/function#rest參數


做者博客:pspgbhu

做者GitHub:https://github.com/pspgbhu

歡迎轉載,但請註明出處,謝謝!

相關文章
相關標籤/搜索