Das Folgende ist ein Auszug aus dem Quellcode und eine eingehende Analyse seiner Design- und Implementierungsideen:
Der Code lautet wie folgt:
function format(string) { var args=arguments; var pattern=new RegExp("%([1-" + arguments.length + "])", "g"); return String(string).replace(pattern, function(match, index) { return args[index]; }); };
Durch der Formatfunktion der folgende Code:
Der Code lautet wie folgt:
format("And the %1 want to know whose %2 you %3", "papers", "shirt", "wear");
gibt zurück: „Und die Zeitungen wollen wissen, wessen Hemd du trägst“.
Natürlich ist es ein bisschen wie das Übergeben von Parametern und das Aufrufen der Funktion string.format in C#.
Im Allgemeinen scheint es, dass es wirklich keinen technischen Inhalt gibt. Aber gibt es wirklich keine technischen Inhalte? Lou Zhu wagt es, dieses Programm auf der Grundlage seiner oberflächlichen Kenntnisse und seines Verständnisses von Javascript und Argumenten zu analysieren:
1. Regulärer Ausdruck
erstellt sehr geschickt einen neuen, der mit % beginnt und der Anzahl der Argumente von 1 bis 1 entspricht , dieses regelmäßige Muster ist eine wichtige Voraussetzung für das Ersetzen von Zeichenfolgen in Punkt 2 unten.
2. Funktion zum Ersetzen von Zeichenfolgen. Per Definition ist die Variable args tatsächlich ein Argument, und dann kann der Indexparameter über args[index] abgerufen werden, und index>=1 und index
Die Funktion ist so kurz und prägnant, dass sie einen großen Kontrast zu den leistungsstarken Funktionen bildet, was erstaunlich ist.
Es gibt vielleicht viele Entwickler, die wie Lou Zhu von C# verwöhnt sind und von der Schreibmethode von string.format in C# besessen sind (die meisten davon sind auf Nutzungsgewohnheiten zurückzuführen, nicht wahr?) Der Quellcode wurde leicht geändert:
function format(string) { var args=arguments; var pattern=new RegExp("{([0-" + arguments.length + "])}", "g"); return String(string).replace(pattern, function(match, index) { var currentIndex=parseInt(index); if (currentIndex + 1 > args.length || currentIndex < 0) { throw new Error("参数索引出错"); } return args[currentIndex + 1]; }); }; document.write(format("And the {0} want to know whose {1} you {2}", "papers", "shirt", "wear"));//大括号,索引从0开始...
Das letzte Mal habe ich diesen Artikel im Jahr 2008 gelesen. Lou Zhu war 2008 ziemlich aufgeklärt und arbeitete hart daran, JavaScript zu lernen, obwohl er bereits wusste, dass er es verwenden konnte Seine eigene Sprache wird verwendet, um die Funktion „createFunction“ zu definieren, wenn ein Ereignis definiert wird, und die Funktion „createFunction“ wird verwendet, um eine Funktion ohne Parameter für die Verwendung im Ereignis zu erstellen, aber damals war ich immer deprimiert, dass „ich nur ihre Form kenne, aber.“ nicht seine Realität.“ Nachdem ich Andrews Meisterwerk gelesen hatte, fühlte ich mich plötzlich erleuchtet. Obwohl meine Reaktion langsam war und ich es später merkte, fühlte ich mich dennoch äußerst inspiriert und zufrieden.