Öffentliche und private Klassenfelder
Mehrere Vorschläge erweitern die bestehende JavaScript-Klassensyntax um neue Funktionen. Dieser Artikel erklärt die neue Syntax von öffentlichen Klassenfeldern in V8 v7.2 und Chrome 72 sowie die kommende Syntax von privaten Klassenfeldern.
Hier ist ein Codebeispiel, das eine Instanz einer Klasse namens IncreasingCounter
erstellt:
const counter = new IncreasingCounter();
counter.value;
// protokolliert 'Den aktuellen Wert abrufen!'
// → 0
counter.increment();
counter.value;
// protokolliert 'Den aktuellen Wert abrufen!'
// → 1
Beachten Sie, dass der Zugriff auf value
einen Code ausführt (d. h., er protokolliert eine Nachricht), bevor das Ergebnis zurückgegeben wird. Überlegen Sie sich nun, wie Sie diese Klasse in JavaScript implementieren würden? 🤔
ES2015-Klassensyntax
So könnte IncreasingCounter
unter Verwendung der ES2015-Klassensyntax implementiert werden:
class IncreasingCounter {
constructor() {
this._count = 0;
}
get value() {
console.log('Den aktuellen Wert abrufen!');
return this._count;
}
increment() {
this._count++;
}
}
Die Klasse installiert den value
-Getter und eine increment
-Methode auf dem Prototyp. Interessanterweise hat die Klasse einen Konstruktor, der eine Instanzeigenschaft _count
erstellt und ihren Standardwert auf 0
setzt. Derzeit verwenden wir oft das Unterstrichpräfix, um anzuzeigen, dass _count
nicht direkt von Konsumenten der Klasse verwendet werden sollte, aber das ist nur eine Konvention; es ist keine wirklich „private“ Eigenschaft mit speziellen Semantiken, die von der Sprache durchgesetzt werden.