Gibt es eine Möglichkeit, "unbegrenzt" vars für eine Funktion in JavaScript zu ermöglichen?
Exemple :
load(var1, var2, var3, var4, var5, etc...)
load(var1)
Gibt es eine Möglichkeit, "unbegrenzt" vars für eine Funktion in JavaScript zu ermöglichen?
Exemple :
load(var1, var2, var3, var4, var5, etc...)
load(var1)
In (den meisten) neueren Browsern können Sie mit dieser Syntax eine variable Anzahl von Argumenten akzeptieren:
function my_log(...args) {
// args is an Array
console.log(args);
// You can pass this array as parameters to another function
console.log(...args);
}
Hier ist ein kleines Beispiel:
function foo(x, ...args) {
console.log(x, args, ...args, arguments);
}
foo('a', 'b', 'c', z='d')
=>
a
Array(3) [ "b", "c", "d" ]
b c d
Arguments
0: "a"
1: "b"
2: "c"
3: "d"
length: 4
Dokumentation und weitere Beispiele hier: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters
Eine andere Möglichkeit ist, die Argumente in einem Kontextobjekt zu übergeben.
function load(context)
{
// do whatever with context.name, context.address, etc
}
und verwenden Sie es wie folgt
load({name:'Ken',address:'secret',unused:true})
Dies hat den Vorteil, dass Sie so viele benannte Argumente hinzufügen können, wie Sie wollen, und die Funktion kann sie nach eigenem Ermessen verwenden (oder auch nicht).
Ich stimme Kens Antwort zu, da sie am dynamischsten ist, und ich möchte noch einen Schritt weiter gehen. Wenn es sich um eine Funktion handelt, die mehrmals mit unterschiedlichen Argumenten aufgerufen wird, verwende ich Kens Entwurf, füge dann aber Standardwerte hinzu:
function load(context) {
var defaults = {
parameter1: defaultValue1,
parameter2: defaultValue2,
...
};
var context = extend(defaults, context);
// do stuff
}
Wenn Sie viele Parameter haben, diese aber nicht unbedingt bei jedem Funktionsaufruf setzen müssen, können Sie auf diese Weise einfach die Nicht-Standardwerte angeben. Für die extend-Methode können Sie die extend-Methode von jQuery verwenden ( $.extend()
), basteln Sie Ihre eigenen oder verwenden Sie die folgenden:
function extend() {
for (var i = 1; i < arguments.length; i++)
for (var key in arguments[i])
if (arguments[i].hasOwnProperty(key))
arguments[0][key] = arguments[i][key];
return arguments[0];
}
Dadurch wird das Kontextobjekt mit den Standardwerten zusammengeführt und alle nicht definierten Werte in Ihrem Objekt werden mit den Standardwerten gefüllt.
Es ist vorzuziehen, die Syntax der Rest-Parameter zu verwenden, wie Ramast dargelegt hat.
function (a, b, ...args) {}
Ich möchte nur einige nette Eigenschaft der ...args Argument hinzufügen
- Es handelt sich um ein Array und nicht um ein Objekt wie Argumente. Dies ermöglicht es Ihnen, Funktionen wie map oder sort direkt anzuwenden.
- Sie umfasst nicht alle Parameter, sondern nur den, der von ihr weitergegeben wird. Z.B. Funktion (a, b, ...args) in diesem Fall enthält args Argument 3 bis arguments.length
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.