Javascript:转发带有可变数量参数的函数调用

时间:2010-06-25 17:20:08

标签: javascript arguments

我想我需要像ruby啪啪*这样的东西。

function foo() {
  var result = '';
  for (var i = 0; i < arguments.length; i++) {
    result += arguments[i];
  }
  return result;
}

function bar() {
  return foo(arguments) // this line doesn't work as I expect
}

bar(1, 2, 3);

我希望此返回"123",而是获得"[object Arguments]"。我认为这是有道理的。它传递的是表示参数的对象,而不是单独的参数。

那么我如何简单地将任意数量的参数转发给另一个带有任意数量参数的函数?

2 个答案:

答案 0 :(得分:20)

要将参数正确传递给另一个函数,您需要使用apply

function bar() {
  return foo.apply(null, arguments);
}

apply方法有两个参数,第一个是thisObj,如果你使用{{1,它的值将被用作被调用函数内的this值}或null,函数内的undefined值将引用全局对象。

this期望的第二个参数是一个类似数组的对象,它包含要应用于函数的参数。

检查上面的示例here

答案 1 :(得分:3)

试试这个return foo.apply(this,arguments)。您也可以使用Array.prototype.slice.apply(arguments).join('')作为您的foo函数。