将一个函数的所有参数传递给另一个函数? (JavaScript的)

时间:2012-04-05 02:16:50

标签: javascript

如何将一个函数的所有参数传递给另一个函数

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。所以如果a(“1”,“2”); ,b(“1”,“2”);,如果a(“1”,2,[3]); ,b(“1”,2,[3]);。

2 个答案:

答案 0 :(得分:5)

使用Function.prototype.apply(thisArg[, argsArray]),如下所示:

b.apply(this, arguments);

现在,arguments是一个类似于数组的对象,除了它的n-index属性外,还有一些其他属性(如callee)。所以,您可能应该使用Array.prototype.slice()将对象转换为一个简单的参数数组(尽管其中任何一个都适用于现代环境)。

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

另请参阅:Function.prototype.call()

答案 1 :(得分:2)

为什么不将它们作为单个对象传递?使用单个对象作为参数的优点是

  • 没有必要订购。不像参数,你必须知道它是接收集合中的第一个,第二个,第三个,在对象中,它们就在那里。在你需要的时候打电话给他们。
  • 你从不担心通过了多少人。你可以发送一个包含很多属性的对象 - 你只在调用者和被调用者之间传递一个参数
当然,在使用

之前,你必须测试它们是否存在
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'
})