1

apply()通常は任意の数のパラメーターを期待するメンバー関数に配列を渡すために使用されていた既存のJavaScriptコードを変更しようとしています。

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私は自分の配列でさまざまなことをしたいので、その場でそれを変更したくありません。poppushshiftunshift

付加して新しい一時配列を作成できることはわかっていますsomeObjectが、そのたびに数行のコードが必要になるようです。

ほぼ同じ行数でやりたいことを達成するためのより表現力豊かな方法はありますか?applyインプレースで1つを変更するのではなく、新しい配列を返す配列関数について、または何かについて私が見逃していることはありますか?私はすでにjQueryを使用しているので、バニラJavaScriptにはない便利なものがあれば、それも素晴らしいことです。

4

1 に答える 1

5

私はします:

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

そうすれば、既存の引数の配列を変更することはありません。MDNから:

concatは、呼び出されたthisオブジェクト内の要素で構成される新しい配列を作成し、その後に、引数ごとに、その引数の要素(引数が配列の場合)または引数自体(引数が配列ではありません)。

于 2012-08-31T09:14:51.050 に答える