Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Arbeide med Private Egenskaper i Klasser | Mastering JavaScript-klasser og Arv
Avansert JavaScript-mestring

bookArbeide med Private Egenskaper i Klasser

I klassebasert programmering oppstår det ofte situasjoner hvor det er ønskelig å begrense direkte tilgang til visse egenskaper for å beskytte dataintegritet og kontrollere hvordan de endres.

Hva er private egenskaper?

I JavaScript er klasseegenskaper vanligvis offentlige, noe som betyr at de kan nås og endres utenfor klassen. Det finnes imidlertid situasjoner hvor det er nødvendig å begrense tilgangen til enkelte egenskaper, slik at de kun kan nås eller endres innenfor selve klassen. Disse kalles private egenskaper.

Private egenskaper bidrar til å skape et tydelig skille mellom klassens interne funksjonalitet og ekstern kode. De er nyttige når du ønsker å skjule sensitiv informasjon eller forhindre utilsiktede endringer av en egenskap fra utsiden av klassen.

Tenk på det som motoren i en bil. Du kan kjøre bilen og bruke dens kontroller, men du har ikke direkte tilgang til motorkomponentene mens du kjører. Motoren er beskyttet mot ekstern manipulering, og kun autoriserte mekanikere (klassemetoder) kan gjøre justeringer.

Hvordan deklarere og bruke private felt i en klasse

I JavaScript deklareres private egenskaper ved å bruke #-syntaksen (introdusert i ES2020). Ved å sette et # foran egenskapsnavnet gjør du det privat, noe som betyr at det kun kan nås innenfor selve 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 dette eksempelet er #type et privat felt. Det kan ikke nås eller endres utenfor Animal-klassen. Ethvert forsøk på å få tilgang til #type direkte fra en instans (som lion.#type) vil resultere i en syntaksfeil. Dette sikrer at sensitiv eller kritisk data kun endres gjennom kontrollerte metoder definert i klassen.

Fordeler med private egenskaper

  1. Private egenskaper beskytter sensitiv data ved å forhindre ekstern tilgang. De sikrer at data kun kan endres gjennom spesifikke metoder, noe som reduserer risikoen for utilsiktede eller uautoriserte endringer;
  2. Private egenskaper lar deg kapsle inn implementasjonsdetaljer, slik at intern logikk skjules for brukeren. Dette fremmer tydelig ansvarsdeling og holder koden modulær;
  3. Med private egenskaper har du bedre kontroll over hvordan data nås og endres innenfor en klasse, og sikrer at endringer skjer gjennom veldefinerte metoder.

Virkelig eksempel: Bankkonto

La oss bruke en virkelig analogi med håndtering av bankkontosaldo. I en bank er saldoen på kontoen din beskyttet, og ingen kan få tilgang til eller endre den direkte. Du kan bare samhandle med den gjennom autoriserte prosesser som innskudd og uttak. På samme måte kan vi bruke private egenskaper i en klasse for å beskytte saldo-feltet mot direkte tilgang eller endring.

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 dette eksempelet er #balance-feltet privat og kan kun nås gjennom offentlige metoder som deposit, withdraw og getBalance. Dette sikrer at saldoen endres på en kontrollert måte, og beskytter den mot uautorisert tilgang eller manipulering.

1. Hva er hovedårsaken til å bruke private egenskaper i en klasse?

2. Hvordan deklarerer du en privat egenskap?

3. Hva skjer hvis du prøver å aksessere en privat egenskap utenfor en klasse?

question mark

Hva er hovedårsaken til å bruke private egenskaper i en klasse?

Select the correct answer

question mark

Hvordan deklarerer du en privat egenskap?

Select the correct answer

question mark

Hva skjer hvis du prøver å aksessere en privat egenskap utenfor en klasse?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 7

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

Can you explain how private properties differ from protected or public properties in JavaScript?

Are there any limitations or caveats when using private fields in JavaScript classes?

Can you show more examples of when to use private properties in real-world scenarios?

Awesome!

Completion rate improved to 2.22

bookArbeide med Private Egenskaper i Klasser

Sveip for å vise menyen

I klassebasert programmering oppstår det ofte situasjoner hvor det er ønskelig å begrense direkte tilgang til visse egenskaper for å beskytte dataintegritet og kontrollere hvordan de endres.

Hva er private egenskaper?

I JavaScript er klasseegenskaper vanligvis offentlige, noe som betyr at de kan nås og endres utenfor klassen. Det finnes imidlertid situasjoner hvor det er nødvendig å begrense tilgangen til enkelte egenskaper, slik at de kun kan nås eller endres innenfor selve klassen. Disse kalles private egenskaper.

Private egenskaper bidrar til å skape et tydelig skille mellom klassens interne funksjonalitet og ekstern kode. De er nyttige når du ønsker å skjule sensitiv informasjon eller forhindre utilsiktede endringer av en egenskap fra utsiden av klassen.

Tenk på det som motoren i en bil. Du kan kjøre bilen og bruke dens kontroller, men du har ikke direkte tilgang til motorkomponentene mens du kjører. Motoren er beskyttet mot ekstern manipulering, og kun autoriserte mekanikere (klassemetoder) kan gjøre justeringer.

Hvordan deklarere og bruke private felt i en klasse

I JavaScript deklareres private egenskaper ved å bruke #-syntaksen (introdusert i ES2020). Ved å sette et # foran egenskapsnavnet gjør du det privat, noe som betyr at det kun kan nås innenfor selve 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 dette eksempelet er #type et privat felt. Det kan ikke nås eller endres utenfor Animal-klassen. Ethvert forsøk på å få tilgang til #type direkte fra en instans (som lion.#type) vil resultere i en syntaksfeil. Dette sikrer at sensitiv eller kritisk data kun endres gjennom kontrollerte metoder definert i klassen.

Fordeler med private egenskaper

  1. Private egenskaper beskytter sensitiv data ved å forhindre ekstern tilgang. De sikrer at data kun kan endres gjennom spesifikke metoder, noe som reduserer risikoen for utilsiktede eller uautoriserte endringer;
  2. Private egenskaper lar deg kapsle inn implementasjonsdetaljer, slik at intern logikk skjules for brukeren. Dette fremmer tydelig ansvarsdeling og holder koden modulær;
  3. Med private egenskaper har du bedre kontroll over hvordan data nås og endres innenfor en klasse, og sikrer at endringer skjer gjennom veldefinerte metoder.

Virkelig eksempel: Bankkonto

La oss bruke en virkelig analogi med håndtering av bankkontosaldo. I en bank er saldoen på kontoen din beskyttet, og ingen kan få tilgang til eller endre den direkte. Du kan bare samhandle med den gjennom autoriserte prosesser som innskudd og uttak. På samme måte kan vi bruke private egenskaper i en klasse for å beskytte saldo-feltet mot direkte tilgang eller endring.

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 dette eksempelet er #balance-feltet privat og kan kun nås gjennom offentlige metoder som deposit, withdraw og getBalance. Dette sikrer at saldoen endres på en kontrollert måte, og beskytter den mot uautorisert tilgang eller manipulering.

1. Hva er hovedårsaken til å bruke private egenskaper i en klasse?

2. Hvordan deklarerer du en privat egenskap?

3. Hva skjer hvis du prøver å aksessere en privat egenskap utenfor en klasse?

question mark

Hva er hovedårsaken til å bruke private egenskaper i en klasse?

Select the correct answer

question mark

Hvordan deklarerer du en privat egenskap?

Select the correct answer

question mark

Hva skjer hvis du prøver å aksessere en privat egenskap utenfor en klasse?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 7
some-alt