19

我有一个值数组:

['a', 'b', 'c', 'd']

我需要将这些作为参数传递给函数:

window.myFunction('a', 'b', 'c', 'd');

如果我可以将数组/对象传递给函数,这会更容易,但是这些函数是由其他人编写的或者已经存在并且我无法更改它们 - 它们需要作为单独的参数传递,这是我需要解决的。

传递的值的数量不一致。可能是1,也可能是100。

同样,我不能影响功能。它们就是它们的样子,我总是会收到一组值来传递给它们。

4

4 回答 4

28

使用.applyFunction 对象的方法。

window.myFunction.apply(window, ['a','b','c','d']);

.apply方法调用您正在调用的函数,但允许您设置函数的this值(第一个参数)并允许您使用 Array 设置其参数(第二个参数)。

所以在这里我们保留windowthis值,我们将数组作为单独的参数传递。Array 成员将被分发,就好像它们作为单独的参数传递一样,所以就好像你已经这样做了:

window.myFunction('a','b','c','d');
于 2013-10-24T15:55:13.320 回答
5

尝试

window.myFunction.apply(window, ['a', 'b', 'c', 'd']);
于 2013-10-24T15:55:09.350 回答
4

在 ES6 中,您可以使用扩展语法。

文档

扩展语法允许在预期零个或多个参数(对于函数调用)或元素(对于数组字面量)的地方扩展诸如数组表达式或字符串之类的可迭代对象,或者在零个或多个参数的地方扩展对象表达式键值对(用于对象文字)是预期的。

您的语法将是:

var array = ['a', 'b', 'c', 'd'];
myFunction(...array);

演示:

var array = ['a', 'b', 'c', 'd'];
myFunction(...array);

function myFunction(p1, p2, p3, p4) {
  console.log(p1, p2, p3, p4);
}

于 2018-01-19T13:30:55.913 回答
0

Array.prototype.map()

var arr = ['a','b','c'];

function echo(x){ 
  console.log(x)
}

function go(){
  arr.map(echo);
}
<button onclick="go()">Test</button>

于 2016-07-28T03:06:15.870 回答