将数组转换为函数参数列表 [重复]

Posted

技术标签:

【中文标题】将数组转换为函数参数列表 [重复]【英文标题】:Converting an array to a function arguments list [duplicate] 【发布时间】:2010-11-21 22:18:20 【问题描述】:

是否可以将 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);
  

【问题讨论】:

在这里也检查类似的问题:***.com/questions/2856059/… 我想这并不重要,但这个旧问题被标记为新的引用问题的副本似乎很奇怪? 【参考方案1】:

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

app[func]( ...args );

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

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

在 MDN 上阅读这些方法:

.apply() spread "..." operator(不要与相关的 rest "..." parameters 运算符混淆:两者都可以阅读!)

【讨论】:

window 似乎没有必要。 如果你想在一个对象中调用一个函数,这不起作用——例如以下不起作用:window.document.execCommand.apply(window,["insertHorizontalRule",false]) 那是因为,在您的情况下,您应该指定window.document 作为第一个参数,而不仅仅是windowwindow.document.execCommand.apply(window.document, ... ) window 实际上在 NodeJS 等非浏览器 JavaScript 框架中毫无意义,因此我建议将其从答案中删除。 如果你可以使用 ES6 特性,你甚至可以使用f(...[1,2,3])【参考方案2】:

另一个类似主题的帖子中的一个非常易读的示例:

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,我个人很喜欢它的可读性

【讨论】:

如果可行,为什么不可行? document.body.setAttribute.apply( this, ["foo", "bar"] ); 我需要将可变参数发送到具有不同参数要求的各种对象方法。 快速编辑:显然this 必须是 document.body 或任何父级 在 Typescript 构造函数上,这将引发错误:Only a void function can be called with the 'new' keyword【参考方案3】:
app[func].apply(this, args);

【讨论】:

【参考方案4】:

您可能想查看在 Stack Overflow 上发布的 similar question。它使用.apply() 方法来完成此操作。

【讨论】:

【参考方案5】:

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

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

但与以下相比,这似乎需要大量工作和混淆:

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

【讨论】:

以上是关于将数组转换为函数参数列表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将字符串转换为函数对象?

JavaScript中将字符串类型转换为整形的函数

根据参数名称为函数分配参数[重复]

Python。重复元素判定。编写一个函数,接受列表作为参数

XML到ARRAY的转换[重复]

将参数列表传递给Python函数[重复]