如何在数组之前使用带有额外参数的JavaScript“apply”方法?

时间:2012-08-31 09:09:12

标签: javascript jquery arrays

我正在尝试修改一些现有的JavaScript代码,这些代码使用apply()将数组传递给成员函数,通常需要任意数量的参数:

oldFoo: function( arg /* , ..., argN */ ) {
  ...
}

var ary = ...

oldFoo.apply($, ary)

... other stuff using ary ...

新代码仍然需要任意数量的参数,我仍然将它们作为要传入的数组,但我还需要在数组之前传入一个新参数

newFoo: function( someObject, arg /* , ..., argN */ ) {
  ...
}

var ary = ...

newFoo.apply($, ???, ary)

... other stuff using ary ...

所以我知道我可以使用数组方法创建ary的新版本,这些方法可以就地修改它,例如pop / push / shift / {{1但是我想用我的数组做各种各样的事情,所以不想在适当的地方修改它。

我知道我可以通过将unshift添加到它来构建一个新的临时数组,但这似乎每次都需要几行代码。

是否有更具表现力的方式来实现我想要做的大约相同数量的线?关于someObject或关于返回新数组而不是就地修改数组的数组函数我缺少的东西?我已经在使用jQuery,所以如果它有一些有用的东西,那么vanilla JavaScript就没有那么好了。

1 个答案:

答案 0 :(得分:5)

我愿意:

newFoo.apply($, ['foo','bar'].concat(ary) );

这样你就不会修改任何现有的参数数组。来自MDN

  

concat创建一个由此中的元素组成的新数组   调用它的对象,按顺序依次为每个参数,   该参数的元素(如果参数是数组)或者   参数本身(如果参数不是数组)。