1. Dep Tatsächlich handelt es sich hierbei um einen Container zum Sammeln von Abhängigkeiten. Klasse Dep{ Konstruktor() { dies._subs = []; } abhängen() { dies._subs.push(Dep.target) } benachrichtigen() { this._subs.forEach(item => { Element.fn(); }) } } // Tatsächlich ist dies der Beginn der Liebe zwischen Dep und Watcher. // Eine globale Eigenschaft wird in Watcher verwendet, um Watcher zu speichern Dep.Ziel = null; Funktion pushTarget(watch) { Dep.target = beobachten; } Funktion popTarget() { Dep.Ziel = null; } 2. Verstehen Sie den Beobachter
// In Accessor-Eigenschaftsfunktion konvertieren defineReactive (obj, key, val, shallow) { // Einen Container für die Abhängigkeitssammlung erstellen let dep = new Dep(); let childOb = !shallow und observe(val) Objekt.defineProperty(Objekt, Schlüssel, { aufzählbar: wahr, konfigurierbar: true, get: Funktion reactiveGetter () { wenn(Dep.target) { // Abhängigkeiten sammeln dep.depend(); } Rückgabewert; // ... }, set: Funktion reactiveSetter (newVal) { wenn (neuer Wert === Wert) return; // Weiter rekursiv durchlaufen observe(newVal); //Abhängigkeit auslösen dep.notify(); // ... } }) } Klasse Beobachter{ Konstruktor(Daten) { dies.walk(Daten); } gehe(Daten) { const keys = Objekt.keys(Daten) für (lass i = 0; i < Schlüssel.Länge; i++) { defineReactive(Daten, Schlüssel[i], Daten[Schlüssel[i]]) } } } // Alle Eigenschaften des Datenobjekts rekursiv in Accessor-Eigenschaften umwandeln function observe (data) { wenn(Object.prototype.toString.call(data) !== '[Objekt Objekt]') return; neuer Beobachter (Daten); } An diesem Punkt können Sie alle Eigenschaften eines beliebigen Objekts in Accessoren umwandeln 3. Verstehen Sie Uhr und Beobachterconst Daten = { ein: 1, b: 2 } //Überwachen Sie zuerst ein Objekt. observe(data); Die Hauptfunktion Klasse Watcher{ /** * @params {Funktion} exp ein Eigenschaftsausdruck * @params {Funktion} fn Rückruf */ Konstruktor(Ausdruck, Funktion) { dies.exp = exp; dies.fn = fn; //Watcher speichern // Dep.target = dies; drückeZiel(dieses); //Führen Sie die Ausdrucksfunktion zunächst einmal aus und führen Sie im aufrufenden Prozess // Den Accessor für data.a auslösen und das Abrufen von data.a wird ausgeführt. // Lösen Sie dep.depend() aus, um mit dem Sammeln von Abhängigkeiten zu beginnen. this.exp(); // Dep.target freigeben popZiel(); } } // neuer Watcher Eine solche Abhängigkeit wird gesammelt new Watcher(() => { gib Daten.a + Daten.b zurück; }, () => { console.log('ändern') }) 4. Trigger-Abhängigkeitdata.a = 3; // ändern data.b = 3; // ändern 5. Fassen Sie den Prozess zusammen
Dies ist das Ende dieses Artikels über die Implementierung eines einfachen Datenantwortsystems. Weitere relevante Inhalte zum Datenantwortsystem finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
>>: So steuern Sie den Anteil untergeordneter Flex-Elemente auf der Hauptachse
Inhaltsverzeichnis 1. Schnelles Verständnis von K...
Um eine inkrementelle Sicherung der MySQL-Datenba...
1. Einführung in Inode Um Inode zu verstehen, müs...
In Linux C/C++ werden Operationen auf Thread-Eben...
Grundlegende Konzepte Aktueller Lesevorgang und S...
Ich denke, Editoren lassen sich in zwei Kategorie...
1. Was ist Docker Secret 1. Szenariodarstellung W...
Awk ist ein leistungsfähiges Tool, das einige Auf...
In diesem Artikel wird der spezifische Code von V...
Bei täglichen Entwicklungsaufgaben verwenden wir ...
Nginx kann im Allgemeinen für siebenschichtigen L...
Inhaltsverzeichnis Vorwort Was ist Hot Change Coc...
Nach dem Einrichten des MySQL-Master-Slaves wisse...
Installieren Sie vor der Installation von Tomcat ...
Inhaltsverzeichnis 1. Einführung in den Implement...