关于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
欢迎转载,但请注明出处,谢谢!