传递可变数量的参数从一个功能到另一个

传递可变数量的参数从一个功能到另一个

问题描述:

可能重复:
Is it possible to send a variable number of arguments to a JavaScript function?传递可变数量的参数从一个功能到另一个

我可以使用arguments一个函数中得到一个可变数量的参数,但我怎么能将它们传递给另一个函数而不知道它的原型?

function show(foo, bar) { window.alert(foo+' '+bar); } 
function run(f) { f(arguments); } // not correct, what to do? 
run(show, 'foo', 'bar'); 

注:我不能保证需要传递给run功能f参数的个数。这意味着,即使所示的例子有两个参数,也可能是0,无限的,所以下面合适:

function run(f) { f(arguments[1], arguments[2]); } 
+0

我不同意,你可以看到,'show'已定义的参数,它不使用'arguments'。我已经尝试过'应用'这种方式,没有运气。 – steveo225

+0

那么,正如你现在已经注意到的那样,'apply'是这样做的唯一方法,因此它*是重复的。 –

+0

是的,除了'arguments'的使用方式完全不同,最终成为问题的关键。 – steveo225

将编程生成的参数集传递给函数的主要方法是使用函数的'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'); 
+0

对于后继,如果函数是一个对象方法并且需要保持它的上下文,那么将'this'对象而不是'null'与'f.apply(this,args);'一起传递。 – tmthydvnprt

你需要使用的应用功能。这里为u如何做到这一点:

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'); 

Demo

可以在实际上做到这一点与适用,如果我正确地理解你的问题:

function show(foo, bar) { window.alert(foo+' '+bar); } 
function run(f, args) { f.apply(null,args); } 
run(show, ['foo', 'bar']); 
+0

问题是,我已经有一个使用'arguments'的框架设置,并且不想切换所有的调用来使用数组。在同样的情况下,我可以尝试将'arguments'从一个对象转换为一个数组并将其传递。 – steveo225

+0

然后看看@Logan的解决方案,好像它会做你需要的。 – spike

在您的例子来传递变量参数,以显示这个作品

function show(foo, bar) { window.alert(foo+' '+bar); } 
function run(f) { f.apply(null, Array().slice.call(arguments, 1)); } 
run(show, 'foo', 'bar');