передача аргументов как отдельных параметров в js - PullRequest
1 голос
/ 12 июля 2009

В javascript, если у меня есть какая-то функция, я могу использовать объект arguments, чтобы посмотреть, сколько параметров было передано. Есть ли способ вызвать вторую функцию и передать эти аргументы, как будто они являются просто обычными отдельными параметрами? *

как то так:

function f()
{
g(arguments);
}

function g(a, b, c)
{
alert(a+b+c);
}

Так что в этом случае, если бы я вызвал f (1,2,3), я бы получил предупреждение 6. Просто чтобы прояснить, я не пытаюсь передать переменное число аргументов, просто способ передать аргументы объекта как обычные отдельные параметры для других функций (возможно, нативных функций javascript)

Ответы [ 2 ]

8 голосов
/ 12 июля 2009
function f() 
{
    g.apply(this,arguments);
}

см. https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function/apply для более подробной информации по этой технике

также обратите внимание, что первый параметр определяет контекст, в котором будет выполняться функция. передача нуля для первого аргумента будет просто использовать глобальный контекст (окно).

0 голосов
/ 12 июля 2009

Другим способом было бы использование зла eval ();

Я не рекомендую это все же.

function f()
{
    var eval_string = "g(";
    for(var i=0; i<arguments.length; i++)
        eval_string += arguments[i] + ", ";  // if arguments[i] is an integer

    eval_string += ");"

    eval(eval_string);
}
...