Prototypische Vererbung ist ein leistungsstarkes JavaScript-Paradigma. Die Verwaltung großer Anwendungen kann jedoch eine Herausforderung sein. Betrachten Sie eine Karussellklasse mit zahlreichen Funktionen:
Carousel.prototype.next = function () {...} Carousel.prototype.prev = function () {..} Carousel.prototype.bindControls = function () {..}
Refactoring für eine bessere Codeorganisation könnte das Gruppieren von Funktionen in Unterobjekten beinhalten:
Carousel.prototype.controls = { next: function () { ... } , prev: function() { ... }, bindControls: function () { .. } }
Diese Änderung führt jedoch zu einem Problem: Das Schlüsselwort „this“ in diesen Funktionen bezieht sich nicht mehr auf die Karussellinstanz.
Wartung Der „diese“-Kontext ist entscheidend, insbesondere in Szenarien, in denen Klassen von übergeordneten Klassen erben. Überschreibende Funktionen in geerbten Klassen müssen das richtige „diese“ Verhalten beibehalten.
Ein Ansatz besteht darin, Controls als separate Klasse zu definieren und eine Referenz zu speichern zur Karussellinstanz:
var Controls = function (controllable_object) { this.ref = controllable_object; }; Controls.prototype.next = function () { this.ref.foo(); } // ..
Während diese Lösung das „diese“ Problem behebt, verhindert sie das Überschreiben der Controls-Implementierung.
Ein flexiblerer Ansatz beinhaltet die Abhängigkeitsinjektion :
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); }; // ..
In diesem Szenario kann die Karussellklasse mehrere Controller hinzufügen, mehrere Funktionssätze aufnehmen und einfache Überschreibungen ermöglichen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3