2011-01-05 13 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:なぜ構文が間違っていると思いますか?エラーが出ていますか?あなたの例では、それぞれの 'type'プロパティには閉じ引用符がありません。実際にこのコードを実行している場合は、エラーが発生します。 – user113716

答えて

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

+0

' func({' param ':' param '})のような関数を呼び出すことはできますか? –

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

+0

あなたは正しいです、私はそれを試して、それは変更されませんでした、スライスは良いですか? –

+0

必要に応じて。例えば、それが配列であるかのように引数に作用する必要がある場合、まずそれを変換する必要があります。あなたが議論を反復しているだけなら、おそらくそうではないでしょう。引数を直接反復処理するためのパフォーマンスヒットがあるかどうかは不明です。 – user113716