Idealerweise würde man refaktorisieren, um ein Objekt zu übergeben und zusammenführen mit einem Standardobjekt, so dass die Reihenfolge, in der die Argumente übergeben werden, keine Rolle spielt (siehe den zweiten Abschnitt dieser Antwort, unten).
Wenn Sie jedoch nur etwas schnelles, zuverlässiges, einfach zu benutzendes und nicht sperriges wollen, sollten Sie dies ausprobieren:
Eine saubere Schnelllösung für eine beliebige Anzahl von Standardargumenten
- Es lässt sich elegant skalieren: minimaler zusätzlicher Code für jede neue Voreinstellung
- Sie können es überall einfügen: Ändern Sie einfach die Anzahl der erforderlichen Argumente und Variablen
- Wenn Sie Folgendes bestehen wollen
undefined
auf ein Argument mit einem Standardwert, so wird die Variable als undefined
. Die meisten anderen Optionen auf dieser Seite würden die undefined
mit dem Standardwert.
Hier ist ein Beispiel für die Bereitstellung von Standardwerten für drei optionale Argumente (mit zwei erforderlichen Argumenten)
function myFunc( requiredA, requiredB, optionalA, optionalB, optionalC ) {
switch (arguments.length - 2) { // 2 is the number of required arguments
case 0: optionalA = 'Some default';
case 1: optionalB = 'Another default';
case 2: optionalC = 'Some other default';
// no breaks between cases: each case implies the next cases are also needed
}
}
Einfache Demo . Dies ist vergleichbar mit roenving's Antwort aber leicht erweiterbar für eine beliebige Anzahl von Standardargumenten, einfacher zu aktualisieren und mit arguments
no Function.arguments
.
Übergabe und Zusammenführung von Objekten für mehr Flexibilität
Der obige Code kann, wie viele andere Methoden zur Übergabe von Standardargumenten, keine Argumente außer der Reihe übergeben, z. B. die Übergabe von optionalC
aber verlassen optionalB
auf den Standardwert zurückfallen.
Eine gute Möglichkeit dafür ist, Objekte zu übergeben und mit einem Standardobjekt zusammenzuführen. Dies ist auch gut für die Wartbarkeit (achten Sie nur darauf, dass Ihr Code lesbar bleibt, damit zukünftige Mitarbeiter nicht im Unklaren über den möglichen Inhalt der übergebenen Objekte gelassen werden).
Beispiel mit jQuery. Wenn Sie jQuery nicht verwenden, können Sie stattdessen Underscore's _.defaults(object, defaults)
o diese Optionen durchsuchen :
function myFunc( args ) {
var defaults = {
optionalA: 'Some default',
optionalB: 'Another default',
optionalC: 'Some other default'
};
args = $.extend({}, defaults, args);
}
Hier ist ein einfaches Beispiel aus der Praxis .
10 Stimmen
openjs.com/articles/optional_function_arguments.php
6 Stimmen
Das ist interessant. Übergabe Argumente als ein assoziatives Array scheint ein guter Weg, um mehr als ein paar Argumente zu behandeln.
1 Stimmen
Das ist genau das, was ich in den meisten Fällen tue. Meine Funktionen mit mehr als einem Argument erwarten ein Objektliteral.
2 Stimmen
@slf Ich glaube, Ihr Kommentar ist übersehen worden, deshalb habe ich eine Antwort über
arguments
in javascript für die Googler.2 Stimmen
Siehe auch: stackoverflow.com/questions/894860/