2011-01-05 60 views
1

我想传递可变数量的javascript函数。JavaScript函数的可变数目的对象参数

做这样的:

function() { 
    var args = Array.prototype.slice.call(arguments); 
    for(var i = 0; i < args.length; i++){ 
     console.log(args[i]); 
    } 
} 

但是,我想在阵列或键值项类似的变量数传:

dsmetrics.track({'object':'hi', 'type:1}, {'object':'hi', 'type:1}, {'object':'hi', 'type:1}); 

但是,这是错误的语法。有没有一个正确的语法可以处理?

+0

@user:你为什么认为语法错了?你是否收到错误?在你的例子中,每个''''属性缺少它的引号。如果你真的在运行这个代码,那会导致错误。 – user113716 2011-01-05 17:32:04

回答

0

我不明白你为什么认为这是错误的语法。

如果您希望它更具动态性,您可以在数组中使用可变数量的参数,并将其作为单独参数传递,则可以使用.apply()

var args = [{'object':'hi', 'type':1}, {'object':'hi', 'type':1}, {'object':'hi', 'type':1}]; 

dsmetrics.track.apply(dsmetrics, args); 

(固定不平衡报价从问号。)

1
var obj = { 
    "param1" : "value1", 
    "param2" : "value2", 
    "param3" : { 
    "param4" : "value4", 
    "param5" : "value5" 
    }, 
    "param6" : "value6" 
}; 

function func(obj) { 

} 
+0

这可以在没有声明obj的方法类中完成吗?我们可以简单地使用新的{'param':'param'} – user564286 2011-01-05 17:21:54

+0

你可以像'func({'param':'param'})那样调用函数' – 2011-01-05 17:23:01

1

See live example。你可以完全按照你的方式来做到这一点,它为每个对象创建一个参数。语法没有错。

function objArgs() { 
    for(var i = 0; i < arguments.length; i++){ 
     console.log(arguments[i]); 
    } 
} 

objArgs({one: 1}, {two: 2}, {three: 3}); 

这实际上只取决于您的业务应用程序。如果分别传递这些参数更合理,或将它们组合成单个数组。

+0

问题中的slice()其实是错的。这是一种将Arguments对象转换为Array的方式,有时这是必要的。 – user113716 2011-01-05 17:22:34

+0

你说得对,我试过了,它没有改变,是更好的切片? – 2011-01-05 17:25:52

+0

取决于需求。例如,如果您需要像参数一样对参数进行操作,那么您需要首先将其转换。如果你只是迭代参数,那么可能不是。不知道是否有直接迭代参数的性能命中。 – user113716 2011-01-05 17:29:56