Передача переменной количества аргументов из одной функции в другую
Возможный дубликат:
Можно ли отправить переменное количество аргументов функции JavaScript?
Я могу использовать arguments
, чтобы получить переменное количество аргументов внутри функции, но как передать их другой функции, не зная ее прототипа?
function show(foo, bar) { window.alert(foo+' '+bar); }
function run(f) { f(arguments); } // not correct, what to do?
run(show, 'foo', 'bar');
Примечание. Я не могу гарантировать количество аргументов, необходимых для функции f
, которая передается в run
. Смысл, хотя приведенный пример имеет 2 аргумента, он может быть 0-бесконечным, поэтому следующий не соответствует:
function run(f) { f(arguments[1], arguments[2]); }
Ответы
Ответ 1
Основной способ передать программно сгенерированный набор аргументов функции - это использовать метод 'apply'.
function show(foo, bar) {
window.alert(foo+' '+bar);
}
function run(f) {
// use splice to get all the arguments after 'f'
var args = Array.prototype.splice.call(arguments, 1);
f.apply(null, args);
}
run(show, 'foo', 'bar');
Ответ 2
Вы можете на самом деле сделать это с помощью приложения, если я правильно понял ваш вопрос:
function show(foo, bar) { window.alert(foo+' '+bar); }
function run(f, args) { f.apply(null,args); }
run(show, ['foo', 'bar']);
Ответ 3
вам нужно использовать функцию apply. Вот как это сделать:
function variableFunction1()
{
alert("variableFunction1 arguments length: " + arguments.length);
// calls second varargs function keeping current 'this'.
variableFunction2.apply(this, arguments);
}
function variableFunction2()
{
alert("variableFunction2 arguments length: " + arguments.length);
}
variableFunction1('a','b','c');
Демо
Ответ 4
В вашем примере передать переменные аргументы, чтобы показать, что это работает
function show(foo, bar) { window.alert(foo+' '+bar); }
function run(f) { f.apply(null, Array().slice.call(arguments, 1)); }
run(show, 'foo', 'bar');