2011-01-05 10 views
1

Ich möchte eine variable Anzahl von JavaScript-Funktionen übergeben.Variable Anzahl der Objektparameter zu JavaScript-Funktion

tun es wie folgt aus:

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

Aber, möchte ich wie in einer variablen Anzahl von Array oder keyvalue Artikel etwas passieren:

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

Aber das ist die falsche Syntax. Gibt es eine korrekte Syntax, die damit umgehen kann?

+0

@user: Warum denkst du, dass die Syntax falsch ist? Erhalten Sie einen Fehler? In Ihrem Beispiel fehlt bei jeder 'type'-Eigenschaft das schließende Anführungszeichen. Das würde zu einem Fehler führen, wenn Sie diesen Code tatsächlich ausführen. – user113716

Antwort

0

Ich verstehe nicht, warum Sie denken, dass das die falsche Syntax ist.

Wenn Sie möchten, dass es dynamischer ist, wo Sie eine variable Anzahl von Argumenten in einem Array haben, die Sie als einzelne Argumente übergeben möchten, können Sie .apply() verwenden.

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

dsmetrics.track.apply(dsmetrics, args); 

(Fest unausgeglichene Anführungszeichen von der Frage.)

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

function func(obj) { 

} 
+0

Kann dies in der Methodenklasse gemacht werden, ohne obj zu deklarieren? Können wir einfach neu machen {'param': 'param'} – user564286

+0

können Sie eine Funktion wie 'func ({'param': 'param'}) aufrufen' –

1

See live example. Sie können dies genau so machen, wie Sie es haben, es erzeugt ein Argument für jedes Objekt. Mit der Syntax ist nichts falsch.

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

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

Es hängt wirklich nur von Ihrer Geschäftsanwendung ab. Wenn es sinnvoller ist, diese Argumente separat zu übergeben oder sie zu einem einzigen Array zusammenzufassen.

+0

Das 'slice()' in der Frage ist nicht eigentlich falsch. Es ist eine Möglichkeit, ein Argument-Objekt in ein Array zu konvertieren, was manchmal notwendig ist. – user113716

+0

Sie haben Recht, ich habe es versucht und es hat sich nicht geändert, ist die Scheibe besser? –

+0

Hängt von den Bedürfnissen ab. Wenn Sie zum Beispiel die Argumente so behandeln müssen, als wäre es ein Array, müssen Sie es zuerst konvertieren. Wenn Sie nur über die Argumente iterieren, dann wahrscheinlich nicht. Nicht sicher, ob es einen Performance-Treffer für die direkte Iteration der Argumente gibt. – user113716

Verwandte Themen