2012-03-22 10 views
1

以下のコードで、errHandlerBasic()はerrHandlerBasic()が受け取ったすべての引数+追加の引数をerrHandlerPlus()でどのように呼び出すことができますか?JavaScriptの関数の引数にどのように追加できますか?

function errHandlerBasic() 
{ 
    //Something like... 
    errHandlerPlus(arguments, "additional string param"); 
} 

function errHandlerPlus() 
{ 
    //... 
} 

答えて

3

それは必然的に非常にきれいに見えませんが、これを達成することができます

function errHandler() { 
    errHandlerPlus.apply(this, [].slice.call(arguments).concat('more', 'values')); 
} 

引数が真の配列ではなく、Objectから継承しているので、我々は少しfinaglingをしなければなりませんjavascriptのネイティブ配列メソッドにアクセスするために使用します。

たとえば、jsfiddleを参照してください。

+0

うまくいくと思われます。ありがとうございました! –

0

Javascriptの関数は実際にはオブジェクトです。そのため、Javascriptのすべての関数には、関数に渡される引数の配列である 'arguments'というプロパティがあります。あなたのコードで何かを変更する必要はありません、それは動作するはずです。あなたはそれを実行しようとしましたか?

+0

あなたはそうです;)私は擬似コードが実際に動作することを期待していませんでした! –

+0

実際にはそれほど正しくありません。私はapply –

2
errHandlerPlus.apply(this, Array.prototype.concat.call(null, arguments, ["additional string param"])); 
+0

をArray.prototype.slice.call(arguments、0)にして呼び出す必要があると思います。私はupvoteします。 – Bergi

+0

これとの違いは: 'errHandlerPlus.apply(null、arguments、" newArg ");' –

+0

apply関数はコンテキストと引数配列の2つのパラメータしか取ることができません。 –

関連する問題