Ausleihen Sie den Konstruktor -Vererbung
Bei der Lösung des Problems der Einbeziehung von Referenztypwerten in einen Prototyp begannen Entwickler, eine Technik namens Borrow -Konstruktor -Diebstahl (manchmal als geschmiedete Objekte oder klassische Vererbung bezeichnet) zu verwenden. Die Grundidee dieser Technik ist recht einfach, nämlich den Supertyp -Konstruktor innerhalb des Subtyp -Konstruktors.
Grundmodus
Funktion SuperType () {this.colors = ["Red", "Blue", "Green"]; // "rot, blau, grün, schwarz" var instance2 = new subtype (); alert (Instance2.Colors); // "Rot, Blau, Grün"Grundlegende Ideen
Die grundlegende Idee, Konstruktoren auszuleihen, besteht darin, den in der übergeordneten Klasse angegebenen Anruf in der von der Unterklasse erstellten Eigenschaften und Methoden zu verwenden oder zu bewerben. Da dieses Objekt zur Laufzeit basierend auf der Ausführungsumgebung der Funktion gebunden ist. Das heißt weltweit ist dies gleich Fenster, und wenn eine Funktion als Methode eines Objekts bezeichnet wird, ist dies gleich diesem Objekt. Mit dem Aufruf und der Anwendung können Methoden eine Methode anstelle eines anderen Objekts aufrufen. Die Aufruf- und Anwendungsmethoden können den Objektkontext einer Funktion aus dem anfänglichen Kontext in ein von ThisOBJ angegebenes neues Objekt ändern.
Daher wird dieser Kreditkonstruktor, wenn das neue Objekt aufgerufen wird (beachten Sie, dass sich der neue Bediener vom direkten Anruf unterscheidet. Wenn die Funktion aufgerufen wird, weist dies auf das Fenster hin. Wenn das Neue erstellt wird, zeigt dies auf die erstellte Instanz), wird ein neues Instanzobjekt erstellt und der Code in Subtyp ausgeführt. Der Aufruf in Subtyp nennt Superyep, was bedeutet, dass dieses Zeigten in eine neue Instanz geändert wird, sodass diese zugewandten Attribute und Methoden in SuperType der neuen Instanz zugewiesen werden, anstatt SupType zuzuweisen. Alle Fälle haben diese Eigenschaften und Methoden davon von der übergeordneten Klasse.
Vorteile
Im Vergleich zu Prototyp -Ketten können Kreditkonstruktoren einen großen Vorteil haben, das heißt, sie können Parameter an Supertyp -Konstruktoren in Subtypkonstruktoren übergeben. Da das Attribut daran gebunden ist, wird es der entsprechenden Instanz zugeordnet, wenn sie aufgerufen werden, und die Werte jeder Instanz haben sich nicht gegenseitig.
Zum Beispiel:
Funktion SuperType (name) {this.name = name;} Funktion subtype () {// erbt SuperType und übergibt auch den Parameter SuperType.call (this, "Nicholas"); // Instance this.age = 29;} Var Instance = new subtype (); //"Nicholas";alert(instance.age); // 29Nachteile
Wenn Sie nur einen Konstruktor ausleihen, werden die Probleme mit dem Konstruktormuster nicht vermieden - Methoden sind alle im Konstruktor definiert, sodass es keine Möglichkeit gibt, über die Wiederverwendung von Funktionen zu sprechen. Darüber hinaus sind in Supertyp -Prototypen definierte Methoden auch für Subtypen unsichtbar, und infolgedessen können alle Typen nur Konstruktormuster verwenden. Angesichts dieser Probleme wird auch die Technik der Kreditaufbaukonstruktoren allein selten eingesetzt.
Kombinationsvererbung
Kombinationsvererbung, manchmal als pseudoklassische Vererbung bezeichnet. Es ist ein Vererbungsmodell, das die Prototyp -Kette und die geliehene Konstruktorentechnologie in ein Stück kombiniert, um die Stärken beider zu spielen.
Grundlegende Ideen
Die Idee ist, die Prototyp -Kette zu verwenden, um die Vererbung von Prototypeigenschaften und -methoden zu implementieren und die Vererbung von Instanzeigenschaften durch Kreditkonstruktoren zu implementieren. Auf diese Weise wird das Funktionsmultiplexing durch Definieren von Methoden im Prototyp erreicht und kann auch sicherstellen, dass jede Instanz ihre eigenen Attribute hat.
Grundmodell
Funktion SuperType (Name) {this.name = name; this.colors = ["rot", "blau", "grün"];} supertype.prototype.sayname = function () {alert (this.name); this.age = älter;} // Inheritanzmethode Subtyp.Prototype = new SuperType (); subtyp.Prototype 29); Instance1.Colors.push ("schwarz"); alert (Instance1.Colors); // "rot, blau, grün, schwarz" Instance1.sayName (); // "Nicholas"; Instance1.Sayage (); // 29var Instance2 = neuer Subtyp ("Greg", 27); alert (Instance2.Colors); // "rot, blau, grün" Instance2.SayName (); // "Greg"; Instance2.Sayage (); // 27Vorteile
Die Kombinationsvererbung vermeidet die Defekte von Prototypketten und geliehenen Konstruktoren, kombiniert ihre Vorteile und wird zum am häufigsten verwendeten Vererbungsmuster in JavaScript.
Nachteile
Das größte Problem bei der kombinierten Vererbung ist, dass der Supertyp -Konstruktor auf jeden Fall zweimal aufgerufen wird: einmal beim Erstellen eines Subtyp -Prototyps und zum anderen Zeitpunkt innerhalb des Subtyp -Konstruktors. Während Subtypen letztendlich alle Instanzeigenschaften des SuperType -Objekts enthalten, müssen wir diese Eigenschaften beim Aufrufen des Subtyp -Konstruktors überschreiben.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.