2011-01-05 46 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