1

我正在尝试修改一些现有的 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 ...

所以我知道我可以制作一个新版本的arywith 数组方法,它可以就地修改它,例如// /poppush我想用我的数组做各种事情,所以不想就地修改它。shiftunshift

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

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

4

1 回答 1

5

我会做:

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

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

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

于 2012-08-31T09:14:51.050 回答