利用apply()或者rest参数来实现用数组传递函数参数
关于call()和apply()的用法,MDN文档里写的非常清晰明白,在这里就不多做记录了。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/call
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
虽说了解了call()和apply()的作用,但是一直没有怎么遇见适用的场景,直到最近常常遇见需要将函数多个参数以数组的形式传入,因此才了解到了apply()的一个适用场景。
因为apply在修改this指向的同时,还能够用数组传入参数,这恰好就为我这个场景需求打开了新思路。
现举例如下
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指向,只是利用它可以用数组传参的特性而已。
用es6实现:
顺便一提,在es6中有关于函数的拓展中加入了rest参数,恰好也解决了这种场景。我在这里也放出一段示例代码。
const arr = [1, 2, 3];
const obj = {
func(arg1, arg2, arg3) {
return arg1 + arg2 + arg3;
}
}
obj.func(...arr);
关于rest参数的资料 阮一峰先生开源的书是最好的教程,我在这里也就把链接贴出来好了
作者博客:pspgbhu
作者GitHub:https://github.com/pspgbhu
欢迎转载,但请注明出处,谢谢!