Ein Iterator ist ein Objekt, das nacheinander auf Datensammlungen zugreifen kann. Eine seiner typischen APIs ist die nächste Methode. Diese Methode erhält den nächsten Wert in der Sequenz.
Iteratorbeispiel
Thema: Ich hoffe, eine bequeme Funktion zu schreiben, mit der eine beliebige Anzahl von Parametern erfolgen und einen Iterator für diese Werte erstellen kann.
Der Testcode ist gut:
var it = values (,,,,,,); it.Next (); // it.next (); // it.next (); // it.next (); //
Analyse: Da die Wertefunktion mehrere Parameter empfangen muss, müssen wir die Methode zum Erstellen einer Funktion mit variablen Parametern verwenden, die im vorherigen Abschnitt erwähnt werden. Dann iteriert das Iterator -Objekt in den Elementen des Argumenteobjekts.
Vorläufiger Code
Funktionswerte () {var i =, n = Argumente.length; return {hasNext: function () {return i <n;}, Weiter: function () {if (this.hasNext ()) {return argumente [i ++];Testen Sie mit dem obigen Testcode
var it = values (,,,,,); it.Next (); // undefinedit.Next (); // undefinedit.Next (); // undefinedit.Next (); // undefiniert
Fehleranalyse
Das Code -Auslaufergebnis ist nicht korrekt, daher wird das anfängliche Codierungsprogramm nachstehend analysiert.
Funktionswerte () {var i =, n = Argumente.length; // Es gibt hier keinen Fehler, Argumente sind das integrierte Objekt in Werten return {HasNext: function () {return i <n;}, Weiter: Funktion () {if (this.hasNext ()) {returnargumente [i ++]; // Der Fehler erscheint hier. Argumente erscheint hier. Argumente erscheint hier. Argumente erscheint das in erbaute Objekt der nächsten Methode. } Neuen Fehler werfen ("Es hat das Ende erreicht");}}}Der Referenzfehler ist hier einem anderen Kopfschmerz-induzierenden Objekt sehr ähnlich. Beim Umgang mit diesem Zeigen müssen in der Regel Variablen verwendet und dies richtig gespeichert. Verwenden Sie dann diese Variable an anderer Stelle. Anschließend wird die Lösung für das Argumenteobjekt freigegeben, wobei eine Variable zum Speichern verwendet wird, sodass es mit dem Verweis auf das Argumenteobjekt kein Problem gibt.
Wieder codieren
Funktionswerte () {var i =, n = Argumente.length, arg = argumente; return {hasNext: function () {return i <n;}, Weiter: function () {if (this.hasNext ()) {return arg [i ++];Führen Sie den Testcode aus
var it = values (,,,,,,); it.Next (); // it.next (); // it.next (); // it.next (); //
Die Ergebnisse sind die gleichen wie erwartet.
Hinweis
Achten Sie vor der Verschachtelungshierarchie, wenn Sie sich auf Argumente beziehen
Binden Sie einen explizit skopierten Verweis auf die Argumentevariable, damit sie in einer verschachtelten Funktion verwiesen werden kann
Anhang 1: Iterator
Iteratoren werden manchmal Cursors genannt. Sie sind Software -Designmuster für die Programmierung, Schnittstellen, die auf Containern durchquert werden können, und Designer müssen sich nicht um den Inhalt von Containern kümmern.
Iterator UML -Klassendiagramm
Iterator JS -Implementierung
Ich habe ein wenig Verständnis für das Designmodell, aber in bestimmten Projekten gibt es viele von ihnen, die Fabrikmodelle sind, die selten verwendet werden. Das Folgende ist eine einfache Implementierung. Es stimmt etwas nicht. Willkommen zu kommunizieren.
Der Code ist wie folgt
Funktionsliste () {this.data = [];} list.prototype = {add: function () {var args = []. }, entfernen: function (i) {thata.Splice (i,);}, iterator: function () {return neuer iterator (this);}} Funktion iterator (list) {this.list = list this.cur <this.list.data.length-;}, Weiter: function () {if (this.hasNext ()) {return this.list.data [this.cur ++];} Wirf einen neuen Fehler ('Es ist bereits über ~'); it = list.Iterator (); list.add (,,,,,,); it.next (); // it.next (); // it.next (); //Das obige ist die Methode zur Verwendung von Variablen zum Speichern von Argumentenobjekten in JS, die Ihnen vorgestellt wurden. Ich hoffe, es wird für alle hilfreich sein!