7.4.5 Vererbung in JavaScript
JavaScript unterstützt Vererbung, allerdings funktioniert sie anders als in vielen anderen objektorientierten Programmiersprachen. JavaScript ist eine prototypbasierte Sprache, was bedeutet, dass Objekte auf sogenannte Prototyp-Objekte zugreifen können. Eigenschaften und Methoden eines Prototyps werden an das aktuelle Objekt "vererbt".
Prototyp-Objekt
Ein Prototyp-Objekt ist ein spezielles Objekt, von dem "normale" Objekte in JavaScript Eigenschaften und Methoden bekommen (erben) können. Jedes Objekt in JavaScript hat also ein unsichtbares Prototyp-Objekt, auf das es verweist. Wenn eine Eigenschaft oder Methode in einem Objekt nicht gefunden wird, durchsucht JavaScript automatisch das Prototyp-Objekt des aktuellen Objekts – dies ist Teil der sogenannten Prototyp-Kette (prototype chain).
- Beispiel: Ein Objekt studentkann Methoden wietoString()verwenden, die eigentlich im Prototyp-ObjektObjectdefiniert sind.
Tabelle: Wichtige Methoden von Object.prototype
| Wichtige Methoden von Object.prototype | Beschreibung | 
|---|---|
| toString() | Gibt eine String-Darstellung des Objekts zurück. | 
| hasOwnProperty() | Prüft, ob eine Eigenschaft direkt im Objekt definiert ist (nicht im Prototyp). | 
| valueOf() | Gibt den primitiven Wert des Objekts zurück. | 
| isPrototypeOf() | Prüft, ob ein Objekt das Prototyp-Objekt eines anderen Objekts ist. | 
Da wir hier erst mit der Vererbung beginnen, gibt es zu den in der Tabelle genannten Methoden leider kein anschauliches Beispiel. Wir nehmen einfach mit, dass es zu jedem von uns erzeugten Objekt bereits ein übergeordnetes Prototyp-Objekt mit einige Methoden gehört.
Prototyp-basierte Vererbung
Hier wird ein Student-Objekt erstellt, das von der Klasse Person erbt. Dazu wird das Schlüsselwort extends verwendet.
In diesem Beispiel wird die Vererbung in JavaScript gezeigt, indem die Klasse Student die Klasse Person erweitert (man sagt auch, dass Student von der Klasse Person erbt). 
Die Methode info() in Student erweitert die gleichnamige Methode der Basisklasse.
Klassenvererbung mit extends
Mit dem Schlüsselwort extends kann eine Klasse also von einer anderen Klasse erben. Der Konstruktor der Basisklasse wird dabei mit super() aufgerufen, was sicherstellt, dass die Initialisierung korrekt durchgeführt wird.
Beispiel: Erweiterte Vererbung
Wir erweitern das Student-Beispiel, um eine zusätzliche Methode hinzuzufügen:
In diesem Beispiel wird die Vererbungshierarchie um die Klasse Tutor erweitert.
Weiterführende Links