Kursinhalt
Fortgeschrittene JavaScript-Meisterschaft
Fortgeschrittene JavaScript-Meisterschaft
Statische Eigenschaften
In der Programmierung ermöglichen statische Eigenschaften, dass gemeinsame Informationen über alle Instanzen einer Klasse hinweg existieren, was sie ideal für konsistente Daten macht.
Was sind statische Eigenschaften?
Statische Eigenschaften gehören zur Klasse selbst und nicht zu einer bestimmten Instanz der Klasse. Das bedeutet, dass statische Eigenschaften unter allen Instanzen geteilt werden und direkt von der Klasse aus zugänglich sind, ohne dass ein Objekt instanziiert werden muss. Sie werden häufig für Hilfsfunktionen, Konstanten oder Daten verwendet, die über alle Instanzen einer Klasse hinweg geteilt werden sollen.
Betrachten Sie ein Unternehmen, bei dem jeder Mitarbeiter (eine Instanz einer Klasse) seine eigenen persönlichen Informationen (Name, Position) hat, aber die Adresse des Unternehmens (eine statische Eigenschaft) für alle Mitarbeiter gleich ist. Die Adresse gehört zum Unternehmen selbst, nicht zu einem einzelnen Mitarbeiter.
Wie man statische Eigenschaften deklariert und verwendet
Um eine statische Eigenschaft zu deklarieren, verwenden Sie das static
Schlüsselwort innerhalb der Klasse. Statische Eigenschaften können nur mit dem Klassennamen und nicht von Klasseninstanzen aus zugegriffen werden.
class Company { static headquarters = '123 Main St'; // Static property constructor(name) { this.name = name; // Instance property } getCompanyInfo() { return `${this.name} is located at ${Company.headquarters}`; } } const google = new Company('Google'); console.log(google.getCompanyInfo()); // Output: Google is located at 123 Main St const amazon = new Company('Amazon'); console.log(amazon.getCompanyInfo()); // Output: Amazon is located at 123 Main St // Accessing the static property directly from the class console.log(Company.headquarters); // Output: 123 Main St
In diesem Beispiel wird die Eigenschaft headquarters
von allen Instanzen der Company
-Klasse geteilt. Sowohl Google
- als auch Amazon
-Instanzen verweisen auf dieselbe Hauptsitzadresse. Statische Eigenschaften werden direkt mit dem Klassennamen (Company.headquarters
) und nicht über Instanzen der Klasse aufgerufen.
Wie statische Eigenschaften unter allen Instanzen einer Klasse geteilt werden
Da statische Eigenschaften an die Klasse selbst gebunden sind, werden sie nicht für jede Instanz kopiert. Alle Instanzen der Klasse verweisen auf dieselbe statische Eigenschaft, was eine effiziente Möglichkeit darstellt, Daten zu speichern, die sich nicht pro Instanz ändern müssen.
Beispiel: Zähler für die Anzahl der erstellten Instanzen
Angenommen, wir möchten verfolgen, wie viele Instanzen einer Klasse erstellt wurden. Wir können eine statische Eigenschaft verwenden, um die Anzahl der Instanzen zu speichern, und sie jedes Mal inkrementieren, wenn eine neue Instanz erstellt wird.
class User { static count = 0; // Static property to track the number of users constructor(name) { this.name = name; User.count++; // Increment static property every time a new user is created } getUserInfo() { return `${this.name} is user number ${User.count}`; } } const user1 = new User('John'); const user2 = new User('Jane'); const user3 = new User('Alice'); // Accessing the static property directly from the class console.log(User.count); // Output: 3 (number of users created) // Each instance can see the total count of users console.log(user1.getUserInfo()); // Output: John is user number 3 console.log(user2.getUserInfo()); // Output: Jane is user number 3 console.log(user3.getUserInfo()); // Output: Alice is user number 3
In diesem Beispiel wird jedes Mal, wenn ein neuer Benutzer erstellt wird, die statische count
-Eigenschaft inkrementiert. Alle Instanzen der User
-Klasse teilen denselben count
-Wert, da er zur Klasse selbst gehört.
Vorteile von Statischen Eigenschaften
Da statische Eigenschaften über Instanzen hinweg geteilt werden, besteht keine Notwendigkeit, Daten zu duplizieren, was den Code sauberer und effizienter hält. Sie sind besonders nützlich, um Informationen zu speichern, die für alle Instanzen gleich sind, wie Konfigurationseinstellungen oder Konstanten, und helfen, Konsistenz im gesamten Code zu bewahren.
Praxisbeispiel: Anwendungskonfiguration
In einem realen Szenario könnten Sie ein Anwendungskonfigurationsobjekt haben, das gemeinsame Einstellungen in der gesamten Anwendung speichert. Statische Eigenschaften wären eine ausgezeichnete Wahl für solche Anwendungsfälle.
class AppConfig { static appName = 'QuirkApp Solutions'; // Shared configuration setting static version = '1.3.14'; // Shared configuration setting constructor(user) { this.user = user; } getUserConfig() { return `${this.user} is using ${AppConfig.appName} version ${AppConfig.version}`; } } const user1 = new AppConfig('Alice'); const user2 = new AppConfig('Bob'); console.log(user1.getUserConfig()); // Output: Alice is using QuirkApp Solutions version 1.3.14 console.log(user2.getUserConfig()); // Output: Bob is using QuirkApp Solutions version 1.3.14 // Accessing static properties directly from the class console.log(AppConfig.appName); // Output: QuirkApp Solutions console.log(AppConfig.version); // Output: 1.3.14
In diesem Beispiel werden der App-Name und die Version für alle Benutzer der Anwendung gemeinsam genutzt. Die statischen Eigenschaften appName
und version
gehören zur Klasse und werden nicht für jede Instanz repliziert.
1. Was ist eine statische Eigenschaft?
2. Wie greift man auf eine statische Eigenschaft zu?
3. Im folgenden Code, was wird console.log(User.count);
ausgeben?
Danke für Ihr Feedback!