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

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

是。 你会想要使用.apply()方法。 例如:

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

编辑 – 正如manixx指出的那样,那些针对ES6的可以使用这个更短的语法:

 app[func]( ...args ); 

阅读这两个方法在MDN: .apply() , 传播“…”运算符

编辑 – 原始答案指定this||window作为.apply()版本中的第一个参数。 在浏览器中,如果调用外部方法,则parsing为window ,而且window也是特定于浏览器的,所以让我们摆脱它。

来自另一个post的相似主题的非常可读的例子:

 var x = [ 'p0', 'p1', 'p2' ]; function call_me (param0, param1, param2 ) { // ... } // Calling the function using the array with apply() call_me.apply(this, x); 

在这里 ,我个人喜欢它的可读性的原始post的链接

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

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

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

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

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

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