1

假设我们有一个函数

f = function(a, b, c){
    // do something important
}

和一个包含参数的数组

var args = [5, 'string', 12] // just any values

显然,我可以这样调用我的函数:

f(args[0], args[1], args[2])

这真的不优雅,我正在寻找一种更好的方法来实现这一点。感谢您的建议。

4

4 回答 4

3

您正在寻找Function.apply()

f.apply(window, args); // pass something other than null to set 'this' within the call
于 2013-10-29T18:09:09.500 回答
1

使用.apply().

f.apply(window, args);

这将适用于第二个参数位置中的任何类似数组的对象。

它调用函数f,并将您传递的第一个参数设置为其this(这里我刚刚使用window,并将第二个参数的成员作为单独的参数分配给函数。

结果就好像你已经这样做了:

f(5, 'string', 12);

有一个对应的Function.prototype.apply方法称为.call(). 该.call()方法完全相同,只是您单独传递参数。

f.call(window, 5, 'string, 12);

这样做的目的是像正常一样调用函数,但this手动设置值。

于 2013-10-29T18:09:15.980 回答
1

使用.apply(). 第二个参数允许您为要调用的函数指定一组参数。第一个参数是this你在函数上下文中想要的值。

因此,在您的情况下,它将是:

f.apply(null, args);

或者

f.apply(window, args);

如果你想this在上下文中f成为window对象。

于 2013-10-29T18:10:42.857 回答
-1

这取决于您的需求(当然)

如果元素是同质的

var sum = function(numbers) {
   // do some calculations
}

var randomees = [5, 6, 12]
var total = sum(randomees);

如果不是,它们应该有某种描述。即,如果您正在定义选项或参数,那么您会考虑这个

var parameters = {
    size:13,
    shipped:true,
    description:"Laptop"
}

var displayLaptop = function(characteristics) {
    console.log(characteristics.size)
}

(甚至可以使用一些 jQuery.extend ish 方法)

于 2013-10-29T18:14:33.893 回答