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
student
kann Methoden wietoString()
verwenden, die eigentlich im Prototyp-ObjektObject
definiert 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