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

4

2 回答 2

5

使用,像这样:Function.prototype.apply(thisArg[, argsArray])

b.apply(this, arguments);

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

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

也可以看看:Function.prototype.call()

于 2012-04-05T02:19:30.030 回答
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'
})
于 2012-04-05T02:25:33.247 回答