


Detaillierte Erläuterung des Javascript-Vererbungsmechanismus. Beispiele_Javascript-Kenntnisse
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:
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)
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:
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.
this.name = name;
}
Durch die Verwendung von new in diesem Konstruktor wird eine Instanz des Hundeobjekts generiert.
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.
this.name = name;
this.species = 'Canidae';
}
Generieren Sie dann zwei Instanzobjekte:
var dogB = new DOG('二毛');
Die Artenattribute dieser beiden Objekte sind unabhängig. Die Änderung eines von ihnen hat keinen Einfluss auf das andere.
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
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:
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
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:
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:
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.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

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.

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.

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.

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.

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

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

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

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
