8.1 Deklaration von statischen Methoden
Statische Methoden in JavaScript sind Methoden, die direkt in der Klasse definiert sind, nicht in deren Instanzen. Sie werden direkt auf der Klasse aufgerufen, nicht auf den Objekten, die von dieser Klasse erstellt wurden. Statische Methoden werden oft verwendet, um Hilfsfunktionen zu erstellen, die sich auf die Klasse, aber nicht auf spezifische Objekte beziehen.
Statische Methoden werden mit dem Schlüsselwort static vor der Methodendefinition im Klassenrumpf deklariert.
Beispiel:
- Die Methoden
addundmultiplysind als statisch deklariert mit Verwendung des Schlüsselwortsstatic - Diese Methoden werden direkt auf der Klasse
MathHelperund nicht auf deren Instanzen aufgerufen
class MathHelper {
static add(a, b) {
return a + b;
}
static multiply(a, b) {
return a * b;
}
}
console.log(MathHelper.add(5, 3)); // 8
console.log(MathHelper.multiply(5, 3)); // 15
8.2 Verwendung von statischen Methoden
Statische Methoden sind in folgenden Szenarien nützlich:
- Hilfsfunktionen: Statische Methoden können genutzt werden, um Utility-Funktionen zu erstellen, die Operationen ausführen, die mit einer Klasse verbunden sind.
- Factory-Methoden: Statische Methoden können genutzt werden, um Instanzen einer Klasse mit spezifischer Logik zu erstellen.
- Datenverarbeitung: Statische Methoden können genutzt werden, um datenbezogene Operationen durchzuführen, die keine Instanzen der Klasse erfordern.
Beispiel für Hilfsfunktionen:
- Die Klasse
StringUtilenthält die statischen Methodencapitalizeundreverse, die mit Strings arbeiten - Diese Methoden werden direkt auf der Klasse
StringUtilaufgerufen
class StringUtil {
static capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
static reverse(str) {
return str.split('').reverse().join('');
}
}
console.log(StringUtil.capitalize('hello')); // "Hello"
console.log(StringUtil.reverse('hello')); // "olleh"
Beispiel für eine Factory-Methode:
Die statische Methode fromObject erstellt eine Instanz der Klasse Car aus einem Datenobjekt.
class Car {
constructor(brand, model) {
this.brand = brand;
this.model = model;
}
static fromObject(obj) {
return new Car(obj.brand, obj.model);
}
}
const carData = { brand: 'Toyota', model: 'Camry' };
const car = Car.fromObject(carData);
console.log(car.brand); // "Toyota"
console.log(car.model); // "Camry"
8.3 Statische Methoden und Vererbung
In JavaScript werden statische Methoden auch von abgeleiteten Klassen geerbt. Abgeleitete Klassen können statische Methoden der Basisklasse verwenden oder sie überschreiben.
Beispiel für Vererbung von statischen Methoden:
- Die statische Methode
identifyist in der KlasseAnimaldefiniert und wird in der KlasseDogüberschrieben - Die Methode
identifywird auf beiden Klassen aufgerufen
class Animal {
static identify() {
return 'This is an animal';
}
}
class Dog extends Animal {
static identify() {
return 'This is a dog';
}
}
console.log(Animal.identify()); // "This is an animal"
console.log(Dog.identify()); // "This is a dog"
8.4 Zugriff auf statische Methoden innerhalb anderer Methoden
Statische Methoden können innerhalb anderer Methoden der Klasse unter Verwendung des Klassennamens aufgerufen werden.
Beispiel:
Die statische Methode calculateArea wird innerhalb einer anderen statischen Methode describeCircle aufgerufen, wobei das Schlüsselwort this verwendet wird, welches in diesem Kontext auf die Klasse Geometry verweist.
class Geometry {
static calculateArea(radius) {
return Math.PI * radius * radius;
}
static describeCircle(radius) {
const area = this.calculateArea(radius);
return `A circle with radius ${radius} has an area of ${area.toFixed(2)}.`;
}
}
console.log(Geometry.describeCircle(5)); // "A circle with radius 5 has an area of 78.54."
8.5 Statische Methoden und Klasseninstanzen
Statische Methoden können nicht auf Instanzen der Klasse aufgerufen werden. Ein Versuch, eine statische Methode auf einer Instanz aufzurufen, führt zu einem Fehler.
Beispiel:
Die statische Methode add wird auf der Klasse Calculator aufgerufen, nicht auf deren Instanz calc.
class Calculator {
static add(a, b) {
return a + b;
}
}
const calc = new Calculator();
console.log(Calculator.add(3, 4)); // 7
console.log(calc.add(3, 4)); // Fehler: calc.add ist keine Funktion
GO TO FULL VERSION