将数组转换为函数参数列表

时间:2009-08-22 16:29:11

标签: javascript arrays arguments

是否可以将JavaScript中的数组转换为函数参数序列?例如:

run({ "render": [ 10, 20, 200, 200 ] });

function run(calls) {
  var app = .... // app is retrieved from storage
  for (func in calls) {
    // What should happen in the next line?
    var args = ....(calls[func]);
    app[func](args);  // This is equivalent to app.render(10, 20, 200, 200);
  }
}

5 个答案:

答案 0 :(得分:271)

是。在当前版本的JS中,您可以使用:

app[func]( ...args );

ES5及更早版本的用户需要使用.apply()方法:

app[func].apply( this, args );

在MDN上阅读这些方法:

答案 1 :(得分:118)

关于类似主题的另一篇文章的一个非常易读的例子:

var args = [ 'p0', 'p1', 'p2' ];

function call_me (param0, param1, param2 ) {
    // ...
}

// Calling the function using the array with apply()
call_me.apply(this, args);

我个人喜欢here a link to the original post的可读性

答案 2 :(得分:24)

app[func].apply(this, args);

答案 3 :(得分:12)

您可能需要查看Stack Overflow上发布的similar question。它使用.apply()方法来完成此任务。

答案 4 :(得分:1)

@bryc - 是的,你可以这样做:

Element.prototype.setAttribute.apply(document.body,["foo","bar"])

但与以下相比,这似乎是很多工作和混淆:

document.body.setAttribute("foo","bar")