2013-07-07 8 views
11

関数内の引数を別の関数に転送するにはどうすればよいですか?関数の最初の引数の引数を別の関数に '転送'する方法はありますか?

私はこれ持っている:私はa引数に何を得る

function SomeThing(options) { 
    function callback(callback_name) { 
    if(options[callback_name]) { 
     // Desiring to call the callback with all arguments that this function 
     // received, except for the first argument. 
     options[callback_name].apply(this, arguments); 
    } 
    } 
    callback('cb_one', 99, 100); 
} 

は「cb_one」ですが、私はそれが「99」であることを望みます。

var a = new SomeThing({ 
    cb_one: function(a,b,c) { 
    console.log(arguments); // => ["cb_one", 99, 100] 
    console.log(a);   // => cb_one 
    console.log(b);   // => 99 
    console.log(c);   // => 100 
    } 
}); 

どうすればよいですか?

答えて

22

使用options[callback_name].apply(this, [].slice.call(arguments,1));

[].slice.call(arguments,1)すべての引数を含む実際のArrayへの引数( 'array-like')Objectを変換しますが、最初に。

[].slice.callは、Array.prototype.slice.callと表記することもできます。

+5

それは明確であるかもしれない今、あなたは、単純なDOをすることができます

var bind = Function.bind; var call = Function.call; var bindable = bind.bind(bind); var callable = bindable(call); // this is the same as Array.prototype.slice.call var arrayFrom = callable(Array.prototype.slice); 

:代わりに、私はこれを行います'[] .slice.call'の代わりに' Array.prototype.slice.call'を使用して、空の配列に特別なことはないことを示しています。 –

1

あなたはKooilncが何をすることができます。個人的には私は[].slice.callまたはArrray.prototype.slice.callと書くのが嫌いです。 JavaScriptのチャットルームの人々へbindablecallable話の詳細については

options[callback_name].apply(this, arrayFrom(arguments, 1)); 

http://chat.stackoverflow.com/rooms/17/javascript

+0

なぜ「バインド可能」ですか? 'var slice = Function.call.bind(Array.prototype.slice);' – 1983

+0

5行のコードでは、 'bindable'、' callable'、 'arrayFrom'の3つの便利な関数があります。異なる場合。例えば、 'apply'に' bindable'を使用して、 'appunc'という関数を作成し、' func'関数を呼び出すと、 'func.apply'と同等の関数を返すことができます。さらに、それは単によりきれいに見えます。 –

+0

@NagaJolokia Oops。私は最後のコメントであなたを言及するのを忘れました。 –

関連する問題