Die Vererbung ist ein sehr wichtiges Mittel, wenn wir objektorientierte Programmierung implementieren. Obwohl wir sagen, dass wir mehr Kombinationen anstelle der Vererbung überörten und nicht übernehmen und nicht übertreffen können, ist die Vererbung immer unvermeidlich. Was wir hier diskutieren wollen, ist der Vererbungsmechanismus in JavaScript.
Es gibt tatsächlich kein Konzept der Vererbung in JavaScript, aber wir können es mit einigen Mitteln nachahmen. Diese Vererbung kopiert tatsächlich ein Objekt in ein anderes. Sie müssen beachten, dass alle lokalen und Hostklassen nicht als Basisklassen geerbt werden können, hauptsächlich für Sicherheitsüberlegungen.
JavaScript gibt es ungefähr drei Kategorien von Vererbung: 1. Objektimitierung; 2. Prototyp -Vererbung; 3. Mischung der beiden.
1. Nachahmung des Objekts
Tatsächlich hängt die Imparkierung von Objekten eng mit diesem Schlüsselwort zusammen (daher ist es wichtig, dieses Schlüsselwort in JavaScript vollständig zu verstehen: P). Der Konstruktor verwendet dies, um Attributen und Methoden Werte zuzuweisen, und der Konstruktor kann auch als gewöhnliche Funktion angesehen werden, sodass wir den Konstruktor unserer Basisklasse -A -Konstruktor der Unterklasse machen und diese Funktion dann in der Unterklasse aufrufen können, und die Unterklasse erhält die Eigenschaften und Methoden der übergeordneten Klasse.
Das Prinzip ist sehr einfach. Wie können wir es also implementieren? Nehmen wir einen praktischen Betrieb mit dem Code -Beispiel durch.
Implementierungsmethode 1 der Objektimpotation , unsere am häufigsten verwendete Methode zum Erstellen neuer Objekte:
Die Codekopie lautet wie folgt:
var classa = function (name) {
this.name = name;
this.alertname = function () {
alarm (this.name);
}
}
var classB = Funktion (Name, Alter) {
this.myConstructor = classa;
this.myConstructor (Name);
Löschen Sie dies.MyConstructor;
this.age = Alter;
this.alertage = function () {
alarm (this.age);
}
}
Um zu überprüfen, ob die obige Methode korrekt ist, können Sie sie selbst testen. Ich werde den Code schreiben, der für den folgenden Test verwendet wird:
Die Codekopie lautet wie folgt:
var obja = new classa ('dk');
obja.alertname (); // dk
var objb = new classB ('ds', 20);
objb.alertname (); // ds
objb.alertage (); // 20
Dies wird als Objektimitation bezeichnet. Darüber hinaus gibt es zwei weitere Möglichkeiten, um Objektverwechselung zu implementieren. Obwohl ihre Implementierungsmethoden unterschiedlich sind, sind ihre Prinzipien gleich.
Implementierungsmethode für Objektverwechselung 2 , verwenden Sie die Anrufmethode:
Die Codekopie lautet wie folgt:
var classa = function (name) {
this.name = name;
this.alertname = function () {
alarm (this.name);
}
}
var classB = Funktion (Name, Alter) {
classa.call (this, name);
this.age = Alter;
this.alertage = function () {
alarm (this.age);
}
}
Es ist auch durch den Code zu sehen, dass wir in der ersten Methode einen neuen Funktionszeiger erstellt haben, der auf die übergeordnete Klasse, die als Funktion bezeichnet wird, verweist und dann den Zeiger gelöscht hat. Hier verwenden wir die Anrufmethode, um den Konstruktor der übergeordneten Klasse unter diesem Objekt auszuführen und denselben Zweck zu erreichen. Darüber hinaus ist die Anrufmethode die Anwendungmethode.
Implementierungsmethode für Objektverwechsungen drei verwenden die Methode anwenden:
Die Codekopie lautet wie folgt:
var classa = function (name) {
this.name = name;
this.alertname = function () {
alarm (this.name);
}
}
var classB = Funktion (Name, Alter) {
classa.apply (this, New Array (Name));
this.age = Alter;
this.alertage = function () {
alarm (this.age);
}
}
Tatsächlich können Sie feststellen, dass die Anwendungsmethode der Anrufmethode sehr ähnlich ist, außer dass die Parameter geringfügig unterschiedlich sind.
2. Prototyp -Vererbung
Jeder sollte ein Verständnis des Prototypobjekts haben. Alle Eigenschaften und Methoden im Prototypobjekt werden an alle Instanzen der Klasse übergeben. Alle Eigenschaften und Methoden der übergeordneten Klasse werden an das Prototyp -Objekt der untergeordneten Klasse gezahlt, was gleichbedeutend mit der Verwirklichung unseres Erbs entspricht.
Wenn eine Unterklasse alle Eigenschaften und Methoden der übergeordneten Klasse erhalten möchte, zahlen wir direkt eine Instanz der übergeordneten Klasse an das Prototyp -Objekt der Unterklasse. Dann ist unser Unterklasse nicht dem Erhalt aller Objekte und Methoden der übergeordneten Klasse entspricht?
Code Beispieldienst:
Die Codekopie lautet wie folgt:
var classa = function () {
this.name = 'dk';
this.alertname = function () {
alarm (this.name);
}
}
var classB = Funktion (Name, Alter) {
this.name = name;
this.age = Alter;
}
classB.Prototype = new classa ();
classb.prototype.alertage = function () {
alarm (this.age);
}
Beachten Sie, dass der Konstruktor der übergeordneten Klasse hier sicherstellen muss, dass es keine Parameter gibt. Denn selbst wenn es Konstruktorparameter gibt, die Sie nicht übergeben können =. = Bei der Implementierung der Prototyp -Vererbung!
3.. Gemischte Erbschaft
Wie der Name schon sagt, ist die hybride Vererbung die gemischte Verwendung der ersten beiden Methoden.
Die Codekopie lautet wie folgt:
var classa = function (name) {
this.name = name;
}
classa.prototype.alertname = function () {
alarm (this.name);
}
var classB = Funktion (Name, Alter) {
classa.call (this, name);
this.age = Alter;
}
classB.Prototype = new classa ();
classb.prototype.alertage = function () {
alarm (this.age);
}
Die Verwendung von Objektverwechselung implementiert die Übergabe von Parametern an die übergeordnete Klasse und die Verwendung von Prototyp -Vererbung implementiert die Vererbung für öffentliche Methoden.
Nachdem sie über die Vererbungsmethoden in diesen drei Bereichen gesprochen haben, ist es an der Zeit, über das unten stehende Problem zu sprechen.
Sie sind vielleicht verwirrt, warum müssen Sie ein gemischtes Vererbung mit Objektimpotation und Prototyperbe erstellen? Ja, das Wichtigste ist diese Frage.
1. Wenn Sie es tatsächlich testen, werden Sie feststellen, dass die durch Objektimitation implementierte Erbschaft und die Unterklasse nicht auf die Methoden der Prototyp -Kette der übergeordneten Klasse zugreifen können.
2. Die Erben mit Prototypen verwandelt alle Attribute in gemeinsam genutzte Attribute. Wenn Sie zwei Instanzen in derselben Unterklasse implementieren, werden Sie feststellen, dass alle Ihre Instanzen alle Attribute teilen.
3. Aber das ist definitiv unangemessen. Es gibt also eine Methode zur hybriden Vererbung, mit der Attribute privat bleiben und Unterklassen auf die Prototyp -Kette der übergeordneten Klasse zugreifen können.
Sie können es selbst ausprobieren. Wenn das Objekt die Vererbung ausgeht, kann die Unterklasse nicht auf die Prototyp -Kettenmethode der übergeordneten Klasse zugreifen. Alle Instanzen der Prototyp -Kette -Vererbungs -Unterklasse teilen alle übergeordneten Klassenattribute. Ich werde hier keine Beispiele schreiben.