Prototypbasierte Vererbung: Eintauchen in die Rolle des „neuen“ Schlüsselworts
Beim Erweitern einer Widget-Klasse mit einer neuen Funktion namens WeatherWidget wird die Prototypenaufgabe:
WeatherWidget.prototype = new Widget;
spielt eine entscheidende Rolle. Das Schlüsselwort „new“ ruft den Widget-Konstruktor auf und weist seinen Rückgabewert der Prototypeigenschaft von WeatherWidget zu.
Wenn diese Aktion weggelassen wird, würde sie einen Fehler auslösen oder möglicherweise den globalen Namespace verschmutzen. Durch die Verwendung von „new“ wird der Widget-Konstruktor aufgerufen, der eine ordnungsgemäße Initialisierung und einen gültigen Rückgabewert gewährleistet.
Dieser Ansatz erzeugt jedoch ein Szenario, in dem alle WeatherWidget-Instanzen Eigenschaften von derselben Widget-Instanz erben und Werte untereinander teilen . Dies stimmt möglicherweise nicht mit den Vererbungsprinzipien überein.
Um dieses Problem zu beheben und eine echte klassenbasierte Vererbung zu implementieren, sollten die folgenden Schritte unternommen werden:
function Dummy () {} Dummy.prototype = Widget.prototype;
WeatherWidget.prototype = new Dummy();
WeatherWidget.prototype.constructor = WeatherWidget;
Dieser Ansatz stellt sicher, dass WeatherWidget-Instanzen Eigenschaften erben durch die Prototypenkette, ohne Werte untereinander zu teilen.
Für eine prägnantere Lösung in ECMAScript Ed. 5 und höher, erwägen Sie die Verwendung von:
WeatherWidget.prototype = Object.create(Widget.prototype, { constructor: {value: WeatherWidget} });
Alternativ können Sie für eine verallgemeinerte Vererbungsimplementierung Function.prototype.extend() erkunden. Diese Methode ermöglicht eine einfache Prototypenerweiterung und bietet eine praktische „Super“-Zugriffsfunktion zum Aufrufen übergeordneter Methoden.
Das obige ist der detaillierte Inhalt vonWie wirkt sich das Schlüsselwort „neu' auf die prototypbasierte Vererbung in JavaScript aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!