我有一系列值:
['a', 'b', 'c', 'd']
我需要将这些作为参数传递给函数:
window.myFunction('a', 'b', 'c', 'd');
如果我可以将数组/对象传递给函数,这会更容易,但是函数是由其他人编写的或者已经存在而且我无法更改它们 - 它们需要作为单独的参数传递,这就是我需要解决。
传递的值的数量不一致。它可能是一个,也可能是100.
再一次,我不能影响这些功能。它们就是这样,我总会收到一系列值传递给它们。
答案 0 :(得分:24)
使用Function对象的.apply
方法。
window.myFunction.apply(window, ['a','b','c','d']);
.apply
方法调用您正在调用的函数,但允许您设置函数的this
值(第一个参数),并允许您使用Array(第二个参数)设置其参数。
所以这里我们将window
保留为this
值,我们将Array作为单独的参数传递。 Array成员将作为单独的参数传递,就好像你已经这样做了一样:
window.myFunction('a','b','c','d');
答案 1 :(得分:5)
尝试
window.myFunction.apply(window, ['a', 'b', 'c', 'd']);
答案 2 :(得分:1)
在ES6中,您可以使用扩展语法。
从Docs开始:
Spread语法允许在可能需要零个或多个参数(用于函数调用)或元素(用于数组文字)的位置扩展数组表达式或字符串等迭代,或者在需要扩展的位置扩展对象表达式预期零个或多个键值对(对象文字)。
您的语法将是:
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);
}
答案 3 :(得分:0)
var arr = ['a','b','c'];
function echo(x){
console.log(x)
}
function go(){
arr.map(echo);
}
&#13;
<button onclick="go()">Test</button>
&#13;