1. Vererbung der PrototypketteFunktion Übergeordnet () { dieser.name = "kevin"; } Parent.prototype.getName = Funktion () { konsole.log(dieser.name); } Funktion Kind () { } Kind.Prototyp = neues Elternteil(); var Kind1 = neues Kind(); console.log(child1.getName()) // kevin Frage: 1. Die Eigenschaften von Referenztypen werden von allen Instanzen gemeinsam genutzt. Beispiel: Funktion Übergeordnet () { diese.namen = ['kevin', 'daisy']; } Funktion Kind () { } Kind.Prototyp = neues Elternteil(); var Kind1 = neues Kind(); child1.names.push('ja'); console.log(child1.names); // ["kevin", "daisy", "yayu"] var Kind2 = neues Kind(); console.log(child2.names); // ["kevin", "daisy", "yayu"] 2. Beim Erstellen einer Child-Instanz können Sie keine Parameter an Parent übergeben 2. Konstruktoren ausleihen (klassische Vererbung)Funktion Übergeordnet () { diese.namen = ['kevin', 'daisy']; } Funktion Kind () { Übergeordneter Aufruf (dies); } var Kind1 = neues Kind(); child1.names.push('ja'); console.log(child1.names); // ["kevin", "daisy", "yayu"] var Kind2 = neues Kind(); console.log(child2.names); // ["kevin", "daisy"] Vorteil:
Zum Beispiel: Funktion Übergeordnet (Name) { dieser.name = Name; } Funktion Kind (Name) { Übergeordnet.call(dieser, Name); } var Kind1 = neues Kind('Kevin'); console.log(Kind1.Name); // Kevin var Kind2 = neues Kind('Daisy'); console.log(Kind2.Name); // Daisy Mangel:
3. KombinationsvererbungPrototypische Vererbung und klassische Vererbung arbeiten zusammen. Funktion Übergeordnet (Name) { dieser.name = Name; diese.farben = ['rot', 'blau', 'grün']; } Parent.prototype.getName = Funktion () { console.log(dieser.Name) } Funktion Kind (Name, Alter) { Übergeordnet.call(dieser, Name); dieses.Alter = Alter; } Kind.Prototyp = neues Elternteil(); var Kind1 = neues Kind('Kevin', '18'); Kind1.Farben.push('schwarz'); console.log(Kind1.Name); // Kevin console.log(Kind1.Alter); // 18 console.log(child1.colors); // ["rot", "blau", "grün", "schwarz"] var Kind2 = neues Kind('Daisy', '20'); console.log(Kind2.Name); // Daisy console.log(Kind2.Alter); // 20 console.log(child2.colors); // ["rot", "blau", "grün"] Vorteile: Es kombiniert die Vorteile der Prototypkettenvererbung und der Konstruktorfunktion und ist der am häufigsten verwendete Vererbungsmodus in JavaScript. 4. PrototypenvererbungFunktion erstelleObj(o) { Funktion F(){} F.Prototyp = o; gib neues F() zurück; } Es handelt sich um eine simulierte Implementierung von Nachteile: Eigenschaftswerte, die Referenztypen enthalten, teilen sich immer die entsprechenden Werte, genau wie bei der Vererbung in der Prototypkette. var Person = { Name: 'kevin', Freunde: ['Daisy', 'Kelly'] } var person1 = createObj(person); var person2 = createObj(person); person1.name = "Person1"; console.log(person2.name); // kevin person1.firends.push('taylor'); console.log(person2.freunde); // ["daisy", "kelly", "taylor"]
5. Parasitäre VererbungErstellen Sie eine Funktion, die nur zum Kapseln des Vererbungsprozesses dient, das Objekt intern in irgendeiner Form erweitert und schließlich das Objekt zurückgibt. Funktion createObj (o) { var clone = Objekt.erstellen(o); Klon.sayName = Funktion () { console.log('hallo'); } Klon zurückgeben; } Nachteile: Wie beim geliehenen Konstruktormuster wird bei jeder Erstellung eines Objekts eine Methode erstellt. 6. Parasitäre kombinatorische VererbungDer Einfachheit halber wiederholen wir hier den kombinierten Vererbungscode: Funktion Übergeordnet (Name) { dieser.name = Name; diese.farben = ['rot', 'blau', 'grün']; } Parent.prototype.getName = Funktion () { console.log(dieser.Name) } Funktion Kind (Name, Alter) { Übergeordnet.call(dieser, Name); dieses.Alter = Alter; } Kind.Prototyp = neues Elternteil(); var Kind1 = neues Kind('Kevin', '18'); console.log(Kind1) Der größte Nachteil der zusammengesetzten Vererbung besteht darin, dass der übergeordnete Konstruktor zweimal aufgerufen wird. Einmal beim Festlegen des Prototyps einer Untertypinstanz: Kind.Prototyp = neues Elternteil(); Einmal beim Erstellen einer Instanz des Untertyps: var Kind1 = neues Kind('Kevin', '18'); Erinnern Sie sich an die Simulationsimplementierung von new. Tatsächlich werden wir in diesem Satz Folgendes ausführen: Übergeordnet.call(dieser, Name); Hier rufen wir den Parent-Konstruktor erneut auf. Wenn wir also in diesem Beispiel das Objekt Wie können wir also nach Spitzenleistungen streben und diesmal wiederholte Anrufe vermeiden? Was wäre, wenn wir nicht Sehen Sie, wie es umgesetzt wird: Funktion Übergeordnet (Name) { dieser.name = Name; diese.farben = ['rot', 'blau', 'grün']; } Parent.prototype.getName = Funktion () { console.log(dieser.Name) } Funktion Kind (Name, Alter) { Übergeordnet.call(dieser, Name); dieses.Alter = Alter; } // Drei wichtige Schritte var F = function () {}; F.Prototyp = Übergeordneter Prototyp; Kind.Prototyp = neues F(); var Kind1 = neues Kind('Kevin', '18'); Konsole.log(Kind1); Abschließend kapseln wir diese Vererbungsmethode: Funktionsobjekt (o) { Funktion F() {} F.Prototyp = o; gib neues F() zurück; } Funktion Prototyp (Kind, Elternteil) { var Prototyp = Objekt(übergeordneter.Prototyp); Prototyp.Konstruktor = Kind; child.prototype = Prototyp; } // Wenn wir verwenden: Prototyp (Kind, Elternteil); Zitat aus dem Lob der parasitären kombinatorischen Vererbung in „Advanced JavaScript Programming“: Die Effizienz dieses Ansatzes besteht darin, dass der Damit ist dieser Artikel mit einer ausführlichen Erklärung der verschiedenen Vererbungsarten in JavaScript und ihrer Vor- und Nachteile abgeschlossen. Weitere Informationen zu den verschiedenen Vererbungsarten in JavaScript und ihren Vor- und Nachteilen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
>>: Detaillierte Erklärung der Zeichensätze und Validierungsregeln in MySQL
Was ist MyCAT Ein vollständig Open Source-Großdat...
1. Erstellen Sie auf diesem Computer eine neue Ko...
In der täglichen Entwicklung streiten sich Front-...
Ich verwende die Funktion zur Spracherkennung mit...
Überprüfen Sie, ob MySQL bereits unter Linux inst...
Dieser Artikel veranschaulicht anhand von Beispie...
Inhaltsverzeichnis 1. Übersicht 1.1 Verwendung vo...
Im Vergleich zu gewöhnlichen Programmen haben dyn...
Inhaltsverzeichnis - Vorwort - - JVM-Klassenlader...
Am Anfang war ich traurig. Die Screenshots sind w...
Als ich kürzlich an meiner Website „Fußball-Navig...
Trennlinien sind eine gängige Gestaltungsart auf ...
Als ich heute die Anmeldeseite geschrieben habe, ...
Frage: Beim Installieren Nginx in Docker ist der ...
In diesem Tutorial erfahren Sie alles über die In...