Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Arbete med Privata Egenskaper i Klasser | Bemästra JavaScript-klasser och Arv
Avancerad JavaScript-mästerskap

bookArbete med Privata Egenskaper i Klasser

Vid klassbaserad programmering uppstår det ofta situationer där du vill begränsa direkt åtkomst till vissa egenskaper för att skydda dataintegritet och kontrollera hur de modifieras.

Vad är privata egenskaper?

I JavaScript är klassegenskaper vanligtvis publika, vilket innebär att de kan nås och ändras utanför klassen. Det finns dock situationer där åtkomst till vissa egenskaper behöver begränsas, så att de endast kan nås eller ändras inom själva klassen. Dessa kallas privata egenskaper.

Privata egenskaper hjälper till att skapa en tydlig gräns mellan klassens interna funktionalitet och extern kod. De är användbara när du vill dölja känslig data eller förhindra oavsiktliga ändringar av en egenskap utanför klassen.

Tänk på det som motorn i en bil. Du kan köra bilen och använda dess reglage, men du har inte direkt åtkomst till motorkomponenterna när du kör. Motorn är skyddad från yttre påverkan, och endast auktoriserade mekaniker (klassmetoder) kan göra justeringar.

Hur deklareras och används privata fält i en klass

I JavaScript deklareras privata egenskaper med hjälp av #-syntaxen (införd i ES2020). Genom att lägga till ett # före egenskapsnamnet görs det privat, vilket innebär att det endast kan nås inom själva klassen.

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

I detta exempel är #type ett privat fält. Det kan inte nås eller ändras utanför klassen Animal. Alla försök att komma åt #type direkt från en instans (som lion.#type) resulterar i ett syntaxfel. Detta säkerställer att känslig eller kritisk data endast ändras via kontrollerade metoder som definieras i klassen.

Fördelar med privata egenskaper

  1. Privata egenskaper skyddar känslig data genom att förhindra extern åtkomst. De säkerställer att data endast kan ändras via specifika metoder, vilket minskar risken för oavsiktliga eller obehöriga ändringar;
  2. Privata egenskaper gör det möjligt att kapsla in implementeringsdetaljer och dölja intern logik för användaren. Detta främjar tydlig ansvarsfördelning och håller koden modulär;
  3. Med privata egenskaper får du bättre kontroll över hur data nås och ändras inom en klass, vilket säkerställer att ändringar sker genom väldefinierade metoder.

Exempel från verkligheten: Bankkonto

Låt oss använda en verklig analogi för att hantera ett bankkontosaldo. På en bank är saldot på ditt konto skyddat, och ingen kan komma åt eller ändra det direkt. Du kan endast interagera med det genom auktoriserade processer som insättningar och uttag. På samma sätt kan vi använda privata egenskaper i en klass för att skydda saldo-fältet från att nås eller ändras direkt.

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

I detta exempel är fältet #balance privat och kan endast nås via publika metoder som deposit, withdraw och getBalance. Detta säkerställer att saldot ändras på ett kontrollerat sätt och skyddas mot obehörig åtkomst eller manipulation.

1. Vad är huvudorsaken till att använda privata egenskaper i en klass?

2. Hur deklarerar du en privat egenskap?

3. Vad händer om du försöker komma åt en privat egenskap utanför en klass?

question mark

Vad är huvudorsaken till att använda privata egenskaper i en klass?

Select the correct answer

question mark

Hur deklarerar du en privat egenskap?

Select the correct answer

question mark

Vad händer om du försöker komma åt en privat egenskap utanför en klass?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 7

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Awesome!

Completion rate improved to 2.22

bookArbete med Privata Egenskaper i Klasser

Svep för att visa menyn

Vid klassbaserad programmering uppstår det ofta situationer där du vill begränsa direkt åtkomst till vissa egenskaper för att skydda dataintegritet och kontrollera hur de modifieras.

Vad är privata egenskaper?

I JavaScript är klassegenskaper vanligtvis publika, vilket innebär att de kan nås och ändras utanför klassen. Det finns dock situationer där åtkomst till vissa egenskaper behöver begränsas, så att de endast kan nås eller ändras inom själva klassen. Dessa kallas privata egenskaper.

Privata egenskaper hjälper till att skapa en tydlig gräns mellan klassens interna funktionalitet och extern kod. De är användbara när du vill dölja känslig data eller förhindra oavsiktliga ändringar av en egenskap utanför klassen.

Tänk på det som motorn i en bil. Du kan köra bilen och använda dess reglage, men du har inte direkt åtkomst till motorkomponenterna när du kör. Motorn är skyddad från yttre påverkan, och endast auktoriserade mekaniker (klassmetoder) kan göra justeringar.

Hur deklareras och används privata fält i en klass

I JavaScript deklareras privata egenskaper med hjälp av #-syntaxen (införd i ES2020). Genom att lägga till ett # före egenskapsnamnet görs det privat, vilket innebär att det endast kan nås inom själva klassen.

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

I detta exempel är #type ett privat fält. Det kan inte nås eller ändras utanför klassen Animal. Alla försök att komma åt #type direkt från en instans (som lion.#type) resulterar i ett syntaxfel. Detta säkerställer att känslig eller kritisk data endast ändras via kontrollerade metoder som definieras i klassen.

Fördelar med privata egenskaper

  1. Privata egenskaper skyddar känslig data genom att förhindra extern åtkomst. De säkerställer att data endast kan ändras via specifika metoder, vilket minskar risken för oavsiktliga eller obehöriga ändringar;
  2. Privata egenskaper gör det möjligt att kapsla in implementeringsdetaljer och dölja intern logik för användaren. Detta främjar tydlig ansvarsfördelning och håller koden modulär;
  3. Med privata egenskaper får du bättre kontroll över hur data nås och ändras inom en klass, vilket säkerställer att ändringar sker genom väldefinierade metoder.

Exempel från verkligheten: Bankkonto

Låt oss använda en verklig analogi för att hantera ett bankkontosaldo. På en bank är saldot på ditt konto skyddat, och ingen kan komma åt eller ändra det direkt. Du kan endast interagera med det genom auktoriserade processer som insättningar och uttag. På samma sätt kan vi använda privata egenskaper i en klass för att skydda saldo-fältet från att nås eller ändras direkt.

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

I detta exempel är fältet #balance privat och kan endast nås via publika metoder som deposit, withdraw och getBalance. Detta säkerställer att saldot ändras på ett kontrollerat sätt och skyddas mot obehörig åtkomst eller manipulation.

1. Vad är huvudorsaken till att använda privata egenskaper i en klass?

2. Hur deklarerar du en privat egenskap?

3. Vad händer om du försöker komma åt en privat egenskap utanför en klass?

question mark

Vad är huvudorsaken till att använda privata egenskaper i en klass?

Select the correct answer

question mark

Hur deklarerar du en privat egenskap?

Select the correct answer

question mark

Vad händer om du försöker komma åt en privat egenskap utanför en klass?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 7
some-alt