假设我们有一个函数
f = function(a, b, c){
// do something important
}
和一个包含参数的数组
var args = [5, 'string', 12] // just any values
显然,我可以这样调用我的函数:
f(args[0], args[1], args[2])
这真的不优雅,我正在寻找一种更好的方法来实现这一点。感谢您的建议。
假设我们有一个函数
f = function(a, b, c){
// do something important
}
和一个包含参数的数组
var args = [5, 'string', 12] // just any values
显然,我可以这样调用我的函数:
f(args[0], args[1], args[2])
这真的不优雅,我正在寻找一种更好的方法来实现这一点。感谢您的建议。
您正在寻找Function.apply()
f.apply(window, args); // pass something other than null to set 'this' within the call
使用.apply()
.
f.apply(window, args);
这将适用于第二个参数位置中的任何类似数组的对象。
它调用函数f
,并将您传递的第一个参数设置为其this
值(这里我刚刚使用window
),并将第二个参数的成员作为单独的参数分配给函数。
结果就好像你已经这样做了:
f(5, 'string', 12);
有一个对应的Function.prototype.apply
方法称为.call()
. 该.call()
方法完全相同,只是您单独传递参数。
f.call(window, 5, 'string, 12);
这样做的目的是像正常一样调用函数,但this
手动设置值。
使用.apply()
. 第二个参数允许您为要调用的函数指定一组参数。第一个参数是this
你在函数上下文中想要的值。
因此,在您的情况下,它将是:
f.apply(null, args);
或者
f.apply(window, args);
如果你想this
在上下文中f
成为window
对象。
这取决于您的需求(当然)
如果元素是同质的
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 方法)