Jemand hat einmal gesagt, dass ein wirklich gutes Programm nicht hat, wenn ... Else, natürlich nicht so gut wie wäre ... Else. Die Verwendung von Switch ist in der JS -Spezifikation verboten.
Das Befehlsobjekt löst dieses Problem perfekt.
Zitieren Sie einen ausländischen Blog:
JavaScript hat gute Steuerungsanweisungen, die häufig in lockige Klammern eingewickelt werden. Aber es gibt eine Ausnahme: Switch… Fallerklärung. Das Seltsame an Switch… Fall ist, dass Sie am Ende eines jeden Falls den Keyword -Pause hinzufügen müssen, um zu verhindern, dass die Prozesskontrolle zur nächsten Fallanweisung durchflutet. Zeitreise bezieht sich auf die Methode, um mehrere Fälle auszuführen. Wenn die erwartete Pause nicht auftritt, wird die Steuerung automatisch an den nächsten Fall übergeben. Genau wie Semikolons und lockige Zahnspangen können Sie jedoch versehentlich vergessen, Pausen zu schreiben. In diesem Fall sind spätere Fehlerprüfungen schmerzhafter, da die Anweisung selbst korrekt ist. Daher ist es eine gute Angewohnheit, einen Fall zu schreiben, das paarweise brechen.
Wir sagen normalerweise, dass JavaScript über elegante Objektliterale und Funktionen auf höchster Ebene verfügt, die spezifische Methodenabfragen sehr einfach machen. Das für Methodenabfragen erstellte Objekt nennen wir es ein aktives Objekt oder ein Befehlsobjekt, das in vielen Software -Designmustern verwendet wird, einschließlich leistungsstarker und nützlicher Befehlsmuster.
Beispiel:
Die Codekopie lautet wie folgt:
// Methode umschalten
Funktionstestschalter (Name) {
Switch (Name) {
Fall '1':
zurück 'hack';
brechen;
Fall '2':
zurück 'Slash';
brechen;
Fall '3':
zurück 'run';
brechen;
Standard:
false zurückgeben;
brechen;
}
}
// Verwenden Sie das Befehlsobjekt
Funktion testfn (name) {
var names = {
'1': function () {
zurück 'hack';
},
'2': function () {
zurück 'Slash';
},
'3': function () {
zurück 'run';
}
};
if (typeof names [name]! == 'function') {
false zurückgeben;
}
Return Namen [Name] ();
}
// Testergebnisse
var result1 = testswitch ('1');
var result2 = testfn ('2');
console.info (result1, result2);