JavaScript-Prototypen mit beibehaltenen Referenzen und Vererbung organisieren
Um Code bei der Verwendung von JavaScript-Prototypen und Vererbung effektiv zu organisieren, entsteht ein häufiges Problem mit dem Verlust des „dies“-Wertes in kundenspezifischen Prototypen. Bei diesem Problem besteht die Absicht darin, Code zu organisieren, indem Funktionalitäten in verschachtelte Objekte unterteilt werden und gleichzeitig Referenz und Vererbung erhalten bleiben.
Vorgeschlagene Lösung:
Ein Ansatz zur Lösung dieses Problems ist um eine dedizierte Klasse für die betreffende Funktionalität zu erstellen, anstatt sie direkt im Prototyp selbst zu verschachteln.
var Controls = function (controllable_object) { this.ref = controllable_object; }; Controls.prototype.next = function () { this.ref.foo(); } // .. var Carousel = function () { this.controls = new Controls(this); }; // ..
Durch die Definition von Steuerelementen Als separate Klasse bleibt die „this“-Referenz auch innerhalb angepasster Prototypen erhalten. Diese Lösung weist jedoch die Einschränkung auf, dass die Implementierung von Controls nicht überschrieben werden darf.
Abhängigkeitsinjektionslösung:
Um das Überschreiben von Controls-Implementierungen zu ermöglichen, a Der Dependency-Injection-Ansatz kann verwendet werden:
var Controls = function (controllable_object) { this.ref = controllable_object; }; Controls.prototype.next = function () { this.ref.foo(); } // .. var Carousel = function () { this.controllers = []; }; Carousel.prototype.addController = function (controller) { this.controllers.push(controller); }; // .. var carousel = new Carousel(); carousel.addController(new Controls(carousel));
Diese Lösung bietet Flexibilität, indem sie das dynamische Hinzufügen und Ändern von Controllern ermöglicht und so die Auswahl ermöglicht Überschreiben der Funktionalität in geerbten Klassen.
Das obige ist der detaillierte Inhalt vonWie kann ich JavaScript-Prototypen organisieren und dabei „diese' Referenzen und Vererbung beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!