利用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

欢迎转载,但请注明出处,谢谢!

相关文章
相关标签/搜索