将数组转换为函数参数列表
是否有可能将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")