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

Passing all parameters of one function to another? (javascript)

本文关键字:函数 参数传递 另一个 javascript 一个      更新时间:2023-09-26

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

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]);。

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

b.apply(this, arguments);

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

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

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

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

  • 命令是没有必要的。与你必须知道它是接收集合中的第一个、第二个还是第三个的参数不同,在对象中,它们就在那里。需要的时候给他们打电话
  • 你永远不会担心有多少人通过了考试。您可以发送一个包含许多属性的对象,并且在调用者和被调用者之间只传递一个参数

当然,在使用之前,您必须测试它们是否存在

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