Einige Sprachen - wie Ruby, Coffeescript und die bevorstehende JavaScript -Version - können bei der Definition einer Funktion wie folgt Standardparameter deklarieren:
Die Codekopie lautet wie folgt:
Funktion myfunc (param1, param2 = "zweiter String") {
console.log (param1, param2);
}
// Ausgänge: "Erster String" und "zweiter String"
myfunc ("erster String");
// Ausgänge: "Erster String" und "Second String Version 2"
myfunc ("erster String", "zweite String Version 2");
Leider ist dieses Schreiben in der aktuellen JavaScript -Version ungültig. Was können wir also tun, um auf diese Weise mit unserem vorhandenen Toolset zu implementieren?
Die einfachste Lösung ist wie folgt:
Die Codekopie lautet wie folgt:
Funktion myfunc (param1, param2) {
if (param2 === undefiniert) {
param2 = "zweiter String";
}
console.log (param1, param2);
}
// Ausgänge: "Erster String" und "Second String Version 2"
myfunc ("erster String", "zweite String Version 2");
Tatsache ist, dass ein ausgelassener Parameter beim Zugriff immer "undefiniert" ist. Wenn Sie nur einen Parameter haben, ist dies eine gute Lösung, was ist, wenn es zu diesem Zeitpunkt mehrere gab?
Wenn Sie mehr als einen Parameter haben, können Sie ein Objekt als Parameter verwenden, der den Vorteil hat, dass jeder Parameter eine klare Benennung hat. Wenn Sie einen Objektparameter übergeben, können Sie den Standardwert auf die gleiche Weise deklarieren.
Die Codekopie lautet wie folgt:
Funktion myfunc (paramObject) {
var defaultParams = {
Param1: "Erster String",
Param2: "Zweiter String",
Param3: "Dritter Zeichenfolge"
};
var FinalParams = defaultParams;
// Wir iterieren über jede Eigenschaft des Paramobject
für (var Schlüssel in Paramobject) {
// Wenn die aktuelle Eigenschaft nicht geerbt wurde, ging weiter
if (paramObject.hasownProperty (Schlüssel)) {
// Wenn die aktuelle Eigenschaft definiert ist,
// Fügen Sie es zu FinalParams hinzu
if (paramObject [key]! == undefined) {
FinalParams [Key] = ParamObject [Schlüssel];
}
}
}
console.log (FinalParams.param1,
FinalParams.param2,
FinalParams.param3);
}
myfunc ({param1: "meine eigene Zeichenfolge"});
Das ist ein bisschen ungeschickt. Wenn Sie diese Methode viel verwenden, können Sie eine Kapselungsfunktion schreiben. Glücklicherweise haben viele Bibliotheken nun verwandte Methoden, wie die Erweiterungsmethode in JQuery und Unterstriche.
Im Folgenden wird die Erweiterungsmethode von Unterstrich verwendet, um das gleiche Ergebnis oben zu erzielen:
Die Codekopie lautet wie folgt:
Funktion myfunc (paramObject) {
var defaultParams = {
Param1: "Erster String",
Param2: "Zweiter String",
Param3: "Dritter Zeichenfolge"
};
var FinalParams = _..Ettend (defaultParams, paramObject);
console.log (FinalParams.param1,
FinalParams.param2,
FinalParams.param3);
}
// Ausgänge:
// "meine eigene Zeichenfolge" und "zweite Zeichenfolge" und "dritte Zeichenfolge"
myfunc ({param1: "meine eigene Zeichenfolge"});
So können Sie die Standardparameter in der aktuellen JavaScript -Version erhalten.
Kritik und Korrektur unangemessener Aspekte im Artikel sind willkommen.