我正在尝试修改一些现有的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就没有那么好了。
答案 0 :(得分:5)
我愿意:
newFoo.apply($, ['foo','bar'].concat(ary) );
这样你就不会修改任何现有的参数数组。来自MDN:
concat创建一个由此中的元素组成的新数组 调用它的对象,按顺序依次为每个参数, 该参数的元素(如果参数是数组)或者 参数本身(如果参数不是数组)。