關於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
做者博客:pspgbhu
做者GitHub:https://github.com/pspgbhu
歡迎轉載,但請註明出處,謝謝!