Mit Klassen (ES2015) beschreibst du Bauanleitungen für Objekte. Unter der Haube nutzt JavaScript weiterhin Prototypen, aber die Klassensyntax ist deutlich lesbarer.
Klasse definieren
Ergebnis
Rex sagt: Wuff! 21 true function
constructorläuft beinew Hund(...)und setzt die Anfangswertethisist das neue Objekt- Methoden stehen direkt in der Klasse, ohne
function getmacht aus einer Methode eine berechnete Eigenschaft
Statische Member und private Felder
Ergebnis
150 1 150
Der Zugriff k.#stand von außen ist sogar ein Syntaxfehler, schon beim Laden des Programms:
SyntaxError: Private field '#stand' must be declared in an enclosing class
Echte Privatheit gibt es also mit #. Ein vorangestellter Unterstrich (_stand) ist nur eine Konvention.
Vererbung
Ergebnis
Mimi macht Miau Rex macht Wuff (Schäfer) ? macht ... true
In einer Unterklasse muss super() aufgerufen werden, bevor du this benutzt.
Prototypen unter der Haube
Jedes Objekt hat einen Verweis auf einen Prototyp, in dem JavaScript nach nicht gefundenen Eigenschaften weitersucht (Prototypenkette):
Ergebnis
true true true false
Mixins und Komposition
JavaScript erlaubt nur eine Oberklasse. Zusätzliche Fähigkeiten fügst du als Funktion hinzu:
Ergebnis
Donald schwimmt
this und Methoden als Callback
Ergebnis
falsch: TypeError 2
Merke
classmitconstructor, Methoden,get/setundstatic- Private Felder mit
#name extendsundsuperfür Vererbung- Hinter den Klassen steckt die Prototypenkette
- Methoden als Callback verlieren
this: mit Arrow-Feld oderbindlösen
Aufgabe
Baue eine Klasse Rechteck mit breite und hoehe, einer Methode flaeche() und einer Unterklasse Quadrat.