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
1. Installieren Sie eine virtuelle Maschine (phys...
Gemeinsamer Index Die Definition des gemeinsamen ...
Inhaltsverzeichnis Hintergrund erreichen 1. Gekap...
Inhaltsverzeichnis 1. Bedienelemente 1.1. Element...
Denken Sie im Großen und im Kleinen und lenken Si...
In diesem Artikelbeispiel wird der spezifische Co...
1. Verständnis der Übergangsattribute 1. Das Über...
Vorwort Jedes Mal, wenn Sie Docker verwenden, um ...
Inhaltsverzeichnis brauchen: Funktionspunkte Rend...
Methode 1: Verwenden Sie den Befehl SET PASSWORD ...
Ich bin vor Kurzem auf ein Problem gestoßen, als ...
In der Scroll-Ansicht des WeChat-Applets treten b...
Sublimieren Sublime Text ist ein Code-Editor (Sub...
Es gibt viele Tags in XHTML, aber nur wenige werd...
Um die Tabelle zu verschönern, können Sie untersc...