6.1 Klassen-Konstruktoren
Konstruktoren und Methoden von Klassen sind die grundlegenden Elemente der objektorientierten Programmierung in JavaScript. Sie ermöglichen es Objekte zu erstellen und zu initialisieren sowie deren Verhalten zu definieren. Unten sehen wir, wie Konstruktoren und Methoden von Klassen funktionieren und wie man sie anwendet.
Was ist ein Konstruktor?
Ein Konstruktor ist eine spezielle Methode einer Klasse, die beim Erstellen einer neuen Instanz der Klasse aufgerufen wird. Er wird verwendet, um ein Objekt zu initialisieren, Werte seiner Eigenschaften festzulegen und andere Anfangsaufgaben auszuführen.
Konstruktor-Definition
Ein Konstruktor wird mit dem Schlüsselwort constructor
definiert. Innerhalb des Konstruktors kann man mit Hilfe des
Schlüsselworts this
auf die Eigenschaften und Methoden des Objekts zugreifen.
Syntax:
class ClassName {
constructor(parameter) {
// Objektinitialisierung
}
}
Beispiel:
In der Klasse Person
nimmt die Methode constructor
zwei Parameter: name
und age
.
Diese Parameter werden benutzt, um die Eigenschaften name
und age
des erstellten Objekts zu initialisieren.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
const person1 = new Person('Alice', 30);
const person2 = new Person('Bob', 25);
console.log(person1.name); // Gibt aus: Alice
console.log(person2.age); // Gibt aus: 25
Standardkonstruktor
Falls der Konstruktor nicht explizit definiert ist, erstellt JavaScript automatisch einen leeren Standardkonstruktor.
Beispiel:
class Animal {}
const animal = new Animal();
console.log(animal); // Gibt den Inhalt der Klasse Animal {}
4.2 Klassen-Methoden
Methoden von Klassen werden innerhalb des Klassenrumpfes definiert und stellen die Funktionalität für die mit dieser Klasse erstellten Objekte bereit. Methoden werden automatisch dem Prototyp der Klasse hinzugefügt, was es allen Instanzen der Klasse ermöglicht, sie zu erben und zu verwenden.
Syntax:
class ClassName {
constructor(parameter) {
// Objektinitialisierung
}
methode1() {
// Methodenrumpf
}
methode2() {
// Methodenrumpf
}
}
Beispiel:
class Car {
constructor(brand, model) {
this.brand = brand;
this.model = model;
this.mileage = 0;
}
drive(distance) {
this.mileage += distance;
console.log(`${this.brand} ${this.model} fuhr ${distance} Meilen. Gesamtfahrleistung: ${this.mileage}`);
}
getDetails() {
return `${this.brand} ${this.model}, Fahrleistung: ${this.mileage}`;
}
}
const myCar = new Car('Toyota', 'Camry');
myCar.drive(50); // "Toyota Camry fuhr 50 Meilen. Gesamtfahrleistung: 50"
console.log(myCar.getDetails()); // "Toyota Camry, Fahrleistung: 50"
Erklärung:
- In der Klasse
Car
sind zwei Methoden definiert:drive()
undgetDetails()
- Die Methode
drive()
erhöht die Fahrleistung des Autos und gibt Informationen über die zurückgelegte Strecke aus - Die Methode
getDetails()
gibt einen String mit Informationen über das Auto zurück
6.3 Private Methoden
Mit der Einführung neuer ECMAScript-Spezifikationen kam die Möglichkeit, private Methoden und Eigenschaften zu erstellen, die außerhalb der Klasse nicht zugänglich sind. Hierfür wird das Symbol # als Teil des Namens verwendet.
Beispiel für private Methoden und Eigenschaften:
class BankAccount {
#balance = 0;
constructor(initialBalance) {
this.#balance = initialBalance;
}
#validateAmount(amount) {
if (amount <= 0) {
throw new Error('Der Betrag muss positiv sein.');
}
}
deposit(amount) {
this.#validateAmount(amount);
this.#balance += amount;
console.log(`Eingezahlt: ${amount}. Neuer Kontostand: ${this.#balance}`);
}
withdraw(amount) {
this.#validateAmount(amount);
if (amount > this.#balance) {
throw new Error('Unzureichende Mittel.');
}
this.#balance -= amount;
console.log(`Abgehoben: ${amount}. Neuer Kontostand: ${this.#balance}`);
}
getBalance() {
return this.#balance;
}
}
const account = new BankAccount(100);
account.deposit(50); // Gibt aus: Eingezahlt: 50. Neuer Kontostand: 150
account.withdraw(30); // Gibt aus: Abgehoben: 30. Neuer Kontostand: 120
console.log(account.getBalance()); // Gibt aus: 120
// Der Versuch auf eine private Methode oder Eigenschaft zuzugreifen, führt zu einem Fehler
account.#balance; // SyntaxError
account.#validateAmount(50); // SyntaxError
GO TO FULL VERSION