Heim Web-Frontend js-Tutorial Detaillierte Erläuterung des Javascript-Vererbungsmechanismus. Beispiele_Javascript-Kenntnisse

Detaillierte Erläuterung des Javascript-Vererbungsmechanismus. Beispiele_Javascript-Kenntnisse

May 16, 2016 pm 04:31 PM
javascript 机制 继承

Die Beispiele in diesem Artikel beschreiben den JavaScript-Vererbungsmechanismus. Teilen Sie es als Referenz mit allen. Die spezifische Analyse lautet wie folgt:

Für Anfänger ist es im Allgemeinen schwierig, den Vererbungsmechanismus der Javascript-Sprache zu verstehen. Es gibt kein Konzept von „Unterklasse“ und „Elternklasse“ und es gibt keinen Unterschied zwischen „Klasse“ und „Instanz“. one Ein sehr eigenartiges „Prototypenketten“-Modell zur Implementierung der Vererbung.

Ich habe viel Zeit damit verbracht, diesen Teil zu studieren und mir viele Notizen gemacht. Aber es sind alles erzwungene Erinnerungen, die nicht grundsätzlich verstanden werden können.

1. So erstellen Sie eine Klasse

Angenommen, es gibt eine Klasse namens Person wie folgt:

Code kopieren Der Code lautet wie folgt:
var Person = function(name, age) {
This.name = name;
This.age = Alter;
}
Person.prototype.getName = function() {
Geben Sie diesen.Namen zurück;
}

Wie oben: Person repräsentiert alle Menschen auf der Erde, und jeder hat diese beiden grundlegenden Attribute: Name und Alter; B. Name und Alter. Die Frage ist nun, wie diese Beziehung hergestellt werden kann.
Schauen wir uns zunächst an, wie eine rein objektorientierte Sprache das macht (z. B. Actionscrpt3)
Code kopieren Der Code lautet wie folgt:
Klasse Schüler erweitern Person {}; //Sehr einfach, eine Zeile von Code; genauer: Sagen Sie, es ist ein Wort – erweitern

2. So geht's durch den Wechsel zu js

Bevor wir die Implementierung des Vererbungsmechanismus von js erklären, wollen wir zunächst die Prototypenkette von js verstehen:

Code kopieren Der Code lautet wie folgt:
var person = new Person('Poised-flw', 21);
person.getName(); // „Poised-flw“

Wie wird die obige getName()-Methode ausgeführt? Zuerst suche ich nach der Methode getName() in der Person-Funktion und stelle fest, dass es keine gibt. Dann gehe ich zu Person.prototype, um zu suchen und stelle fest, dass es eine gibt! Dann rufen Sie es an, was wäre, wenn nicht? Suchen Sie auf die gleiche Weise weiter entlang des Prototyps, bis Sie eine Methode finden oder die Spitze der Prototypenkette erreichen!

Zum Beispiel gibt es jetzt einen Konstruktor namens DOG, der den Prototyp des Hundeobjekts darstellt.

Code kopieren Der Code lautet wie folgt:
Funktion DOG(name){
  this.name = name;
}

Durch die Verwendung von new in diesem Konstruktor wird eine Instanz des Hundeobjekts generiert.
Code kopieren Der Code lautet wie folgt:
 var dogA = new DOG('Big Hair');
alarm(dogA.name); // Da Mao

Achten Sie auf das Schlüsselwort this im Konstruktor, das das neu erstellte Instanzobjekt darstellt.

3. Nachteile des neuen Betreibers

Die Verwendung eines Konstruktors zum Generieren von Instanzobjekten hat den Nachteil, dass Eigenschaften und Methoden nicht gemeinsam genutzt werden können.
Legen Sie beispielsweise im Konstruktor des DOG-Objekts die allgemeinen Attributarten eines Instanzobjekts fest.

Code kopieren Der Code lautet wie folgt:
Funktion DOG(name){
  this.name = name;
  this.species = 'Canidae';
}

Generieren Sie dann zwei Instanzobjekte:
Code kopieren Der Code lautet wie folgt:
 var dogA = new DOG('Big Hair');
var dogB = new DOG('二毛');

Die Artenattribute dieser beiden Objekte sind unabhängig. Die Änderung eines von ihnen hat keinen Einfluss auf das andere.
Code kopieren Der Code lautet wie folgt:
dogA.species = 'Feline';
warning(dogB.species); // Anzeige „Hund“, nicht betroffen von dogA

Jedes Instanzobjekt verfügt über eine eigene Kopie von Eigenschaften und Methoden. Dies scheitert nicht nur am Datenaustausch, sondern stellt auch eine enorme Ressourcenverschwendung dar.

Also: Die Idee der Vererbung: Implementieren Sie den Vererbungsmechanismus durch die einzigartige Prototypenkette von js!

4. Vererbung basierend auf der Prototypenkette

1. Direkte Vererbungsimplementierung

Code kopieren Der Code lautet wie folgt:
var Students = function(name, age, sid) {
Person.call(this, name, age);
This.sid = sid;
}
Students.prototype = new Person(); //Setzen Sie Person in die Prototypenkette von Students ein, um den Vererbungsmechanismus zu implementieren
Students.prototype.constructor = Studenten;
Students.prototype.getResults = function() {
// Holen Sie sich die Noten der Schüler
}

Verpassen Sie auf keinen Fall die Zeile Students.prototype.constructor = Students! Beim Definieren eines Konstruktors ist sein Standardprototyp eine Objektinstanz, und dann wird die Konstruktoreigenschaft des Prototyps automatisch auf die Funktion selbst festgelegt! ! ! Wenn der Prototyp manuell auf ein anderes Objekt festgelegt wird, verfügt das neue Objekt natürlich nicht über den Konstruktorwert des ursprünglichen Objekts, sodass seine Konstruktoreigenschaften zurückgesetzt werden müssen. Zum Beispiel:
Code kopieren Der Code lautet wie folgt:
var Test = function() {
This.time = "now";
}
console.log(Test.prototype); // Object {} ein leeres Objekt
console.log(Test.prototype.constructor); // function() {this.time = "now";} und die Funktion selbst
// Wenn Sie das Prototypattribut von Test
manuell ändern Test.prototype = {
SomeFunc: function() {
console.log('Hallo Welt!');
}
};
console.log(Test.prototype.constructor); // function Object() { [native code] }
// Dann werden Sie feststellen, dass Sie völlig falsch darauf hingewiesen haben. Wenn Sie also das Prototypattribut manuell ändern, müssen Sie seinen Konstruktorzeiger ändern Nach dem obigen Test wissen Sie, warum der Konstruktorwert geändert werden muss.

2. Geerbte Funktionen erweitern


Code kopieren Der Code lautet wie folgt:Funktion extend(subClass, superClass) {
var F = function() {};
F.prototype = superClass.prototype;
subClass.prototype = new F();
​ subClass.prototype.constructor = subClass;
}

Tatsächlich ist die Funktion dieser Funktion nur eine Kapselung des oben genannten Vererbungsprozesses. Die Unterschiede sind:
Es erbt nur das Prototypattribut von superClass und nicht die Attribute im superClass-Konstruktor;
Dies hat den Vorteil, dass die Kosten für die Erstellung eines neuen Konstruktors reduziert werden!
Das daraus resultierende Problem besteht natürlich darin, dass die Unterklasse nicht alle Attribute der Oberklasse allein über diese Funktion erben kann
Verbesserungen:


Kopieren Sie den Code Der Code lautet wie folgt: // Fügen Sie weiterhin eine Codezeile im Students-Konstruktor hinzu:
Person.call(this, name, age);

5. Zusammenfassung

Mit dem Prototypenkettenprinzip von js können wir den Vererbungsmechanismus von js problemlos implementieren. Obwohl er nicht sehr streng ist, wurde mein Ziel erreicht: Wiederholter Code sollte so oft wie möglich erscheinen!

Ich hoffe, dass dieser Artikel für das JavaScript-Programmierdesign aller hilfreich sein wird.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Detaillierte Erläuterung der C++-Funktionsvererbung: Wie werden „Basisklassenzeiger' und „abgeleitete Klassenzeiger' bei der Vererbung verwendet? Detaillierte Erläuterung der C++-Funktionsvererbung: Wie werden „Basisklassenzeiger' und „abgeleitete Klassenzeiger' bei der Vererbung verwendet? May 01, 2024 pm 10:27 PM

Verwenden Sie bei der Funktionsvererbung „Basisklassenzeiger“ und „abgeleitete Klassenzeiger“, um den Vererbungsmechanismus zu verstehen: Wenn der Basisklassenzeiger auf das abgeleitete Klassenobjekt zeigt, wird eine Aufwärtstransformation durchgeführt und nur auf die Mitglieder der Basisklasse zugegriffen. Wenn ein abgeleiteter Klassenzeiger auf ein Basisklassenobjekt zeigt, wird eine Abwärtsumwandlung durchgeführt (unsicher) und muss mit Vorsicht verwendet werden.

Wie wirken sich Vererbung und Polymorphismus auf die Klassenkopplung in C++ aus? Wie wirken sich Vererbung und Polymorphismus auf die Klassenkopplung in C++ aus? Jun 05, 2024 pm 02:33 PM

Vererbung und Polymorphismus wirken sich auf die Kopplung von Klassen aus: Vererbung erhöht die Kopplung, da die abgeleitete Klasse von der Basisklasse abhängt. Polymorphismus reduziert die Kopplung, da Objekte über virtuelle Funktionen und Basisklassenzeiger konsistent auf Nachrichten reagieren können. Zu den Best Practices gehören der sparsame Umgang mit der Vererbung, die Definition öffentlicher Schnittstellen, das Vermeiden des Hinzufügens von Datenelementen zu Basisklassen und die Entkopplung von Klassen durch Abhängigkeitsinjektion. Ein praktisches Beispiel, das zeigt, wie Polymorphismus und Abhängigkeitsinjektion verwendet werden, um die Kopplung in einer Bankkontoanwendung zu reduzieren.

Ausführliche Erklärung der C++-Funktionsvererbung: Wie kann man Fehler bei der Vererbung debuggen? Ausführliche Erklärung der C++-Funktionsvererbung: Wie kann man Fehler bei der Vererbung debuggen? May 02, 2024 am 09:54 AM

Tipps zum Debuggen von Vererbungsfehlern: Stellen Sie sicher, dass die Vererbungsbeziehungen korrekt sind. Verwenden Sie den Debugger, um den Code schrittweise durchzugehen und Variablenwerte zu untersuchen. Stellen Sie sicher, dass Sie den virtuellen Modifikator richtig verwenden. Untersuchen Sie das Problem der Vererbungsdiamanten, das durch versteckte Vererbung verursacht wird. Suchen Sie nach nicht implementierten rein virtuellen Funktionen in abstrakten Klassen.

Erläuterung der C++-Funktionsvererbung: Wann sollte die Vererbung nicht verwendet werden? Erläuterung der C++-Funktionsvererbung: Wann sollte die Vererbung nicht verwendet werden? May 04, 2024 pm 12:18 PM

Die Vererbung von C++-Funktionen sollte in den folgenden Situationen nicht verwendet werden: Wenn eine abgeleitete Klasse eine andere Implementierung erfordert, sollte eine neue Funktion mit einer anderen Implementierung erstellt werden. Wenn eine abgeleitete Klasse keine Funktion erfordert, sollte sie als leere Klasse deklariert werden oder private, nicht implementierte Mitgliedsfunktionen der Basisklasse verwenden, um die Funktionsvererbung zu deaktivieren. Wenn Funktionen keine Vererbung erfordern, sollten andere Mechanismen (z. B. Vorlagen) verwendet werden, um eine Wiederverwendung des Codes zu erreichen.

Ausführliche Erklärung der C++-Funktionsvererbung: Wie versteht man die Beziehung „is-a' und „has-a' bei der Vererbung? Ausführliche Erklärung der C++-Funktionsvererbung: Wie versteht man die Beziehung „is-a' und „has-a' bei der Vererbung? May 02, 2024 am 08:18 AM

Detaillierte Erläuterung der C++-Funktionsvererbung: Beherrschen Sie die Beziehung zwischen „is-a“ und „has-a“ Was ist Funktionsvererbung? Funktionsvererbung ist eine Technik in C++, die in einer abgeleiteten Klasse definierte Methoden mit in einer Basisklasse definierten Methoden verknüpft. Es ermöglicht abgeleiteten Klassen, auf Methoden der Basisklasse zuzugreifen und diese zu überschreiben, wodurch die Funktionalität der Basisklasse erweitert wird. „Ist-ein“- und „Hat-ein“-Beziehungen Bei der Funktionsvererbung bedeutet die „Ist-ein“-Beziehung, dass die abgeleitete Klasse ein Untertyp der Basisklasse ist, d. h. die abgeleitete Klasse „erbt“ die Merkmale und das Verhalten von die Basisklasse. Die „has-a“-Beziehung bedeutet, dass die abgeleitete Klasse einen Verweis oder Zeiger auf das Basisklassenobjekt enthält, d. h. die abgeleitete Klasse „besitzt“ das Basisklassenobjekt. SyntaxDas Folgende ist die Syntax für die Implementierung der Funktionsvererbung: classDerivedClass:pu

Eine eingehende Untersuchung des Speicherorts und Mechanismus von Golang-Variablen Eine eingehende Untersuchung des Speicherorts und Mechanismus von Golang-Variablen Feb 28, 2024 pm 09:45 PM

Titel: Eine eingehende Untersuchung des Speicherorts und -mechanismus von Golang-Variablen Da die Anwendung der Go-Sprache (Golang) in den Bereichen Cloud Computing, Big Data und künstliche Intelligenz allmählich zunimmt, ist es besonders wichtig, eine fundierte Untersuchung durchzuführen. Tiefes Verständnis des Speicherorts und Mechanismus von Golang-Variablen. In diesem Artikel werden wir die Speicherzuweisung, den Speicherort und die damit verbundenen Mechanismen von Variablen in Golang ausführlich besprechen. Durch spezifische Codebeispiele hilft es den Lesern, besser zu verstehen, wie Golang-Variablen im Speicher gespeichert und verwaltet werden. 1.Speicher von Golang-Variablen

Tiefes Verständnis der Mechanismen der Neuberechnung und Darstellung von CSS-Layouts Tiefes Verständnis der Mechanismen der Neuberechnung und Darstellung von CSS-Layouts Jan 26, 2024 am 09:11 AM

CSS-Reflow und Repaint sind sehr wichtige Konzepte bei der Optimierung der Webseitenleistung. Bei der Entwicklung von Webseiten kann uns das Verständnis der Funktionsweise dieser beiden Konzepte dabei helfen, die Reaktionsgeschwindigkeit und das Benutzererlebnis der Webseite zu verbessern. Dieser Artikel befasst sich mit den Mechanismen des CSS-Reflows und Repaints und stellt spezifische Codebeispiele bereit. 1. Was ist CSS-Reflow? Wenn sich die Sichtbarkeit, Größe oder Position von Elementen in der DOM-Struktur ändert, muss der Browser die CSS-Stile neu berechnen und anwenden und dann das Layout neu gestalten

„Einführung in die objektorientierte Programmierung in PHP: Vom Konzept zur Praxis' „Einführung in die objektorientierte Programmierung in PHP: Vom Konzept zur Praxis' Feb 25, 2024 pm 09:04 PM

Was ist objektorientierte Programmierung? Objektorientierte Programmierung (OOP) ist ein Programmierparadigma, das reale Entitäten in Klassen abstrahiert und Objekte zur Darstellung dieser Entitäten verwendet. Klassen definieren die Eigenschaften und das Verhalten von Objekten und Objekte instanziieren Klassen. Der Hauptvorteil von OOP besteht darin, dass Code einfacher zu verstehen, zu warten und wiederzuverwenden ist. Grundkonzepte von OOP Zu den Hauptkonzepten von OOP gehören Klassen, Objekte, Eigenschaften und Methoden. Eine Klasse ist der Bauplan eines Objekts, der seine Eigenschaften und sein Verhalten definiert. Ein Objekt ist eine Instanz einer Klasse und verfügt über alle Eigenschaften und Verhaltensweisen der Klasse. Eigenschaften sind Merkmale eines Objekts, das Daten speichern kann. Methoden sind Funktionen eines Objekts, die mit den Daten des Objekts arbeiten können. Vorteile von OOP Zu den Hauptvorteilen von OOP gehören: Wiederverwendbarkeit: OOP kann den Code erweitern

See all articles