Erbschaft Einführung
Die Vererbung in JS ist ein sehr komplexes Thema, das viel komplexer ist als Vererbung in einer anderen objektorientierten Sprache. In den meisten anderen objektorientierten Sprachen erfordert die Erbschlüsselung einer Klasse nur ein Schlüsselwort. Um den Zweck der Erbdeckung öffentlicher Mitglieder in JS zu erreichen, muss eine Reihe von Maßnahmen ergriffen werden. JS ist ein Prototyp -Vererbung. Dank dieser Flexibilität können wir Standardklassenbasis oder subtilere Prototyp-Vererbung verwenden. In JS sollte klar sein, dass die gesamte Vererbung durch Prototypen durchgeführt wird und JS basierend auf Objekten vererbt wird.
erben:
Funktion Animal (Name) {this.name = name; this.showname = function () {alert (this.name); }} Funktion cat (name) {Animal.call (this, name); } var cat = new Cat ("schwarze Katze"); Cat.Showname ();Animal.Call (dies) bedeutet, ein Tierobjekt anstelle dieses Objekts zu verwenden. Dann gibt es nicht alle Eigenschaften und Methoden des Tieres in der Katze? Das Katzenobjekt kann direkt Tiermethoden und Eigenschaften aufrufen.
Mehrfacherbschaft:
Funktion class 10 () {this.showsub = Funktion (a, b) {alert (ab); }} function class111 () {this.showadd = function (a, b) {alert (a+b); }} Funktion class2 () {class10.call (this); Class11.call (this); }Es ist sehr einfach und verwendet zwei Aufrufe, um mehrfacher Vererbung zu erreichen
Natürlich gibt es andere Methoden zum Erben von JS, z. Apropos Anruf, natürlich gilt auch. Diese beiden Methoden bedeuten im Grunde dasselbe. Der Unterschied besteht darin, dass der zweite Anrufparameter von jedem Typ sein kann, während der zweite Antragsparameter ein Array oder Argumente sein muss.
Hier finden Sie eine Beschreibung, wie Sie eine einfache Vererbung in JavaScript implementieren können?
Das folgende Beispiel erstellt einen Mitarbeiterklassen -Mitarbeiter, der alle Eigenschaften im Prototyp -Prototyp der Person erbt.
Funktionsangestellter (Name, Sex, Mitarbeiter) {this.name = name; this.sex = sex; this.AmpledEId = EmployeeId;} // Zeigen Sie den Mitarbeiterprototyp auf eine Instanz der Person // Da die Person Instanz Methoden im Person -Prototyp aufrufen kann, kann die Mitarbeiterinstanz auch alle Eigenschaften im Person -Prototyp anrufen. Employee.Prototype = new Person (); Mitarbeiter.Prototype.getOleMEID = function () {return this.EMPLET;}; var zhang = new Employee ("Zhangsan", "Man", ""); console.log (Zhang.getname ()); // "ZhangsanDie obige Implementierung der Vererbung ist rau und es gibt viele Probleme:
Die Person wird beim Erstellen von Mitarbeiternkonstruktor und -Prototyp (im Folgenden als Klasse bezeichnet) instanziiert, was unangemessen ist.
Der Konstruktor des Mitarbeiters kann den Konstruktor der übergeordneten Klassenperson nicht aufrufen, was zu wiederholten Zuordnungen von Namen und Geschlechtsattributen im Mitarbeiterkonstruktor führt.
Funktionen im Mitarbeiter überschreiben die gleichnamigen Funktionen persönlich ohne Überladungsmechanismen (und der vorherige ist das gleiche Typ -Problem).
Die Syntax zum Erstellen von JavaScript -Klassen ist zu verstreut und nicht so elegant wie die Syntax in C#/java.
In der Implementierung gibt es einen Fehler beim Zeigen des Konstruktorattributs.