Bevor Sie etwas tun, müssen Sie sich zunächst über die Vorteile des Tuns klar machen. Ich glaube, dass niemand bereit ist, Dinge ohne Grund zu tun. Im Allgemeinen hoffen wir, wenn wir Kurse entwerfen, tatsächlich die Duplizierung von Code verringern. Die Verwendung von Vererbung kann dies perfekt tun. Mit Hilfe des Vererbungsmechanismus können Sie wieder auf der Grundlage vorhandener Klassen entwerfen und die verschiedenen bereits vorhandenen Methoden auszahlen und das Design leichter ändern. Ich werde nicht viel Unsinn sagen, geben Sie ein Beispiel:
Die Codekopie lautet wie folgt:
Funktionsperson (Name) {
this.name = name;
}
Person.Prototype.getName = function () {
kehre diesen namennamen zurück;
}
Funktion Bloger (Name, Blog) {
Person.call (this, Name);
this.blog = Blog;
}
var Bloger = neuer Bloger ("Zhen", "// www.vevb.com");
Alert (blower.name == "zhenn"); /*Kehre zu ture zurück*/
Alert (blokern.blog) /*tip//www.vevb.com*/
alert (blower.getName () == "zhenn"); /*Tipp "Bloger.getName ist keine Funktion"*//
Aus dem obigen Beispiel können wir sehen, dass der Bloger die nativen Eigenschaften und Methoden seiner übergeordneten Klassenperson dynamisch durch einen Anruf in ihm aufruft (für die Erläuterung des Anrufs finden Sie bitte auf //www.vevb.com/article/62086.htm), der als Bloger verstanden werden kann, die Person erbt und eine Unterklasse von IT wird. Sorgfältige Schüler werden jedoch feststellen, dass die Methoden im Person -Prototyp -Objekt nicht durch die Stütze ausschließlich auf den Anruf vererbt werden können. Deshalb fordert es "Bloger.GetName ist keine Funktion" auf. Aber mach dir keine Sorgen, kümmere dich einfach um den obigen Code, um dieses Problem zu lösen!
Die Codekopie lautet wie folgt:
Funktionsperson (Name) {
this.name = name;
}
Person.Prototype.getName = function () {
kehre diesen namennamen zurück;
}
Funktion Bloger (Name, Blog) {
Person.call (this, Name);
this.blog = Blog;
}
/*Bitte beachten Sie die folgenden zwei Codezeilen*/
Bloger.Prototype = new Person ();
Bloger.Prototype.Constructor = Bloger;
var Bloger = neuer Bloger ("Zhen", "// www.vevb.com");
Alert (blower.name == "zhenn"); /*Kehre zu ture zurück*/
Alert (blokern.blog) /*tip//www.vevb.com*/
alert (blower.getName () == "zhenn"); /* fordern true*/
Hier müssen wir diese beiden Codezeilen erklären. Wir wissen, dass jeder Konstruktor über ein Prototypattribut verfügt, das auf das Prototypobjekt des Konstruktors hinweist. Tatsächlich ist das Prototypobjekt auch ein Instanzobjekt, aber die im Prototypenobjekt definierten Attribute und Methoden können allen Instanzobjekten zur Freigabe bereitgestellt werden. Daraus können wir sehen, dass die Absicht, zwei Codezeilen hinzuzufügen, darin besteht, das Prototypobjekt der Unterklasse so festzulegen, dass sie auf ein instanziiertes Objekt der übergeordneten Klasse hinweisen, und das sofortige Objekt der übergeordneten Klasse wird alle Prototyp -Attributmethoden der übergeordneten Klasse erben, die unser Ziel erreichen. Der Prototyp der Unterklasse erbt die Eigenschaften und Methoden aller übergeordneten Klasseninstanzobjekte.
Sie sollten jedoch auch beachten, dass Bloger.Prototype.Constructor = Bloger; Diese Codezeile, denn wenn der Subklass -Prototyp auf die Instanz der übergeordneten Klasse eingestellt ist, zeigt sein Konstruktorattribut auf die übergeordnete Klasse, sodass der Konstruktor des Subklass -Prototyps auf die Subklasse festgelegt werden muss. Zu diesem Zeitpunkt wurde die Klassenvererbung von JavaScript perfekt implementiert!
Um die Erklärung der Unterklassen zu vereinfachen, kann der gesamte Prozess der Erweiterung von Unterklassen in einer Funktion namens Extend geschrieben werden, bei der eine neue Klasse basierend auf einer bestimmten Klassenstruktur erstellt wird:
Die Codekopie lautet wie folgt:
Funktion erweitert (ChildClass, Elternklasse) {
var f = new Function ();
F.Prototype = parentClass.Prototype;
ChildClass.Prototype = new f ();
ChildClass.Prototype.Constructor = ChildClass;
}
Mit dieser Erweiterungsfunktion können Sie die Unterklasse problemlos erweitern. Nennen Sie diese Funktion einfach. Die beiden oben hinzugefügten Codezeilen können in Erweiterung (Bloger, Person) geändert werden, die auch eine vollständige Erbschaft erreichen können!