Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Private Eigenschaften | Klassen
Fortgeschrittene JavaScript-Meisterschaft
course content

Kursinhalt

Fortgeschrittene JavaScript-Meisterschaft

Fortgeschrittene JavaScript-Meisterschaft

2. DOM-Manipulation
3. Ereignisse und Ereignisbehandlung
4. Asynchrones JavaScript und APIs

book
Private Eigenschaften

In der klassenbasierten Programmierung gibt es oft Fälle, in denen Sie den direkten Zugriff auf bestimmte Eigenschaften einschränken möchten, um die Datenintegrität zu schützen und zu kontrollieren, wie sie geändert werden.

Was sind Private Eigenschaften?

In JavaScript sind Klassen-Eigenschaften typischerweise öffentlich, was bedeutet, dass sie von außerhalb der Klasse aus zugegriffen und geändert werden können. Es gibt jedoch Situationen, in denen Sie den Zugriff auf bestimmte Eigenschaften einschränken müssen, um sicherzustellen, dass sie nur innerhalb der Klasse selbst zugegriffen oder geändert werden können. Diese werden als private Eigenschaften bezeichnet.

Private Eigenschaften helfen dabei, eine klare Grenze zwischen den internen Abläufen der Klasse und externem Code zu schaffen. Sie sind nützlich, wenn Sie sensible Daten verbergen oder unbeabsichtigte Änderungen an einer Eigenschaft von außerhalb der Klasse verhindern möchten.

Denken Sie daran wie an den Motor eines Autos. Während Sie das Auto fahren und mit seinen Bedienelementen interagieren können, haben Sie während der Fahrt keinen direkten Zugriff auf seine Motorkomponenten. Der Motor ist vor äußerer Manipulation geschützt, und nur autorisierte Mechaniker (Klassenmethoden) können Anpassungen vornehmen.

Wie man Private Felder in einer Klasse deklariert und verwendet

In JavaScript werden private Eigenschaften mit der #-Syntax (eingeführt in ES2020) deklariert. Durch das Voranstellen eines Eigenschaftsnamens mit # machen Sie ihn privat, was bedeutet, dass darauf nur innerhalb der Klasse selbst zugegriffen werden kann.

12345678910111213141516171819202122
class Animal { #type; // Declaring a private field constructor(name, type) { this.name = name; this.#type = type; // Assigning a value to the private field } getInfo() { return `${this.name} is a ${this.#type} animal.`; } changeType(newType) { this.#type = newType; // Modifying the private field within the class } } const lion = new Animal('Lion', 'Wild'); console.log(lion.getInfo()); // Output: Lion is a Wild animal // Attempt to access private field directly (this will cause an error) console.log(lion.#type); // Uncaught SyntaxError: Private field '#type' must be declared in an enclosing class
copy

In diesem Beispiel ist #type ein privates Feld. Es kann nicht außerhalb der Animal-Klasse zugegriffen oder geändert werden. Jeder Versuch, direkt auf #type von einer Instanz aus zuzugreifen (wie lion.#type), führt zu einem Syntaxfehler. Dies stellt sicher, dass sensible oder kritische Daten nur durch kontrollierte Methoden geändert werden, die in der Klasse definiert sind.

Vorteile von privaten Eigenschaften

  1. Private Eigenschaften schützen sensible Daten, indem sie externen Zugriff verhindern. Sie stellen sicher, dass Daten nur durch spezifische Methoden geändert werden können, wodurch das Risiko von versehentlichen oder unbefugten Änderungen reduziert wird;
  2. Private Eigenschaften ermöglichen es Ihnen, Implementierungsdetails zu kapseln und die interne Logik vor dem Benutzer zu verbergen. Dies fördert eine saubere Trennung der Anliegen und hält Ihren Code modular;
  3. Mit privaten Eigenschaften haben Sie eine feinere Kontrolle darüber, wie Daten innerhalb einer Klasse zugegriffen und geändert werden, und stellen sicher, dass Änderungen durch gut definierte Methoden erfolgen.

Beispiel aus der realen Welt: Bankkonto

Nehmen wir ein Beispiel aus der realen Welt zur Verwaltung eines Bankkontostands. In einer Bank ist der Kontostand geschützt, und niemand kann direkt darauf zugreifen oder ihn ändern. Sie können nur über autorisierte Prozesse wie Einzahlungen und Abhebungen damit interagieren. Ähnlich können wir private Eigenschaften in einer Klasse verwenden, um das Feld für den Kontostand vor direktem Zugriff oder Änderungen zu schützen.

12345678910111213141516171819202122232425262728293031323334353637
class BankAccount { #balance; // Private field constructor(owner, initialBalance) { this.owner = owner; this.#balance = initialBalance; } // Method to deposit money deposit(amount) { if (amount > 0) { this.#balance += amount; } } // Method to withdraw money withdraw(amount) { if (amount > 0 && amount <= this.#balance) { this.#balance -= amount; } } // Method to get account balance getBalance() { return `Account balance for ${this.owner}: $${this.#balance}`; } } const account = new BankAccount('John', 1000); account.deposit(500); console.log(account.getBalance()); // Output: Account balance for John: $1500 account.withdraw(200); console.log(account.getBalance()); // Output: Account balance for John: $1300 // Direct access to balance is not allowed console.log(account.#balance); // SyntaxError: Private field '#balance' must be declared in an enclosing class
copy

In diesem Beispiel ist das #balance-Feld privat und kann nur über öffentliche Methoden wie deposit, withdraw und getBalance zugegriffen werden. Dies stellt sicher, dass der Kontostand auf kontrollierte Weise geändert wird und vor unbefugtem Zugriff oder Manipulation geschützt ist.

1. Was ist der Hauptgrund für die Verwendung privater Eigenschaften in einer Klasse?

2. Wie deklariert man eine private Eigenschaft?

3. Was passiert, wenn Sie versuchen, von außerhalb einer Klasse auf eine private Eigenschaft zuzugreifen?

Was ist der Hauptgrund für die Verwendung privater Eigenschaften in einer Klasse?

Was ist der Hauptgrund für die Verwendung privater Eigenschaften in einer Klasse?

Wählen Sie die richtige Antwort aus

Wie deklariert man eine private Eigenschaft?

Wie deklariert man eine private Eigenschaft?

Wählen Sie die richtige Antwort aus

Was passiert, wenn Sie versuchen, von außerhalb einer Klasse auf eine private Eigenschaft zuzugreifen?

Was passiert, wenn Sie versuchen, von außerhalb einer Klasse auf eine private Eigenschaft zuzugreifen?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 7
We're sorry to hear that something went wrong. What happened?
some-alt