3

ある関数のすべてのパラメーターを別の関数に渡す方法

function a(){
    arguments.length;// this is 1
    // how do I pass any parameter function a receives into another function
    b(what to put here?); // say pass all parameters function a receives to function b
}
a('asdf'); // this is okay

したがって、関数 a が X 個のパラメーターを受け取る場合、各パラメーターは同じ順序で関数 b に渡されます。したがって、if a("1", "2"); , b("1", "2");, if a("1", 2, [3]); , b("1", 2, [3]);.

4

2 に答える 2

5

次のように使用します。Function.prototype.apply(thisArg[, argsArray])

b.apply(this, arguments);

現在、は、 n-index プロパティarguments以外のいくつかのプロパティ ( など) を持つ配列のようなオブジェクトです。calleeしたがって、オブジェクトを引数の単純な配列に変換するために使用する必要があります (ただし、どちらも最新の環境では機能します)。Array.prototype.slice()

b.apply(this, Array.prototype.slice.call(arguments));

以下も参照してください。Function.prototype.call()

于 2012-04-05T02:19:30.030 に答える
2

それらを単一のオブジェクトとして渡さないのはなぜですか? 単一のオブジェクトをパラメーターとして使用する利点は、

  • 注文は必要ありません。受信コレクションの 1 番目、2 番目、3 番目であるかどうかを知る必要がある引数とは異なり、オブジェクトでは、それらはただそこにあります。必要なときに電話してください。
  • 渡された回数を気にする必要はありません。多くのプロパティを含む 1 つのオブジェクトを送信できます。また、呼び出し元と呼び出し先の間で引数を 1 つだけ渡します。

もちろん、使用する前にそれらが存在するかどうかをテストする必要があります

function foo(data){
    data.param1; //is foo
    data.param2; //is bar
    data.param3; //is baz

    //send params to bar
    bar(data);
}

function bar(info){
    info.param1; //is foo
    info.param2; //is bar
    info.param3; //is baz
}

//call function foo and pass object with parameters
foo({
    param1 : 'foo',
    param2 : 'bar',
    param3 : 'baz'
})
于 2012-04-05T02:25:33.247 に答える