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

是否有可能将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);
}
}
178318 次浏览

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

app[func]( ...args );

ES5及以上版本的用户将需要使用.apply()方法:

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

在MDN上阅读这些方法:

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

你可能想看看Stack Overflow上发布的类似的问题。它使用.apply()方法来完成这一点。

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

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


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


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

这里有原始文章的链接,我个人喜欢它的可读性

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

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

但与以下内容相比,这似乎需要做很多工作和混淆:

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