Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Werken met Private Eigenschappen in Klassen | Beheersing van JavaScript-Klassen en Overerving
Geavanceerde JavaScript-Beheersing

bookWerken met Private Eigenschappen in Klassen

In klasse-gebaseerde programmering zijn er vaak situaties waarin directe toegang tot bepaalde eigenschappen beperkt moet worden om de integriteit van gegevens te waarborgen en te controleren hoe deze worden aangepast.

Wat zijn private eigenschappen?

In JavaScript zijn klasse-eigenschappen doorgaans publiek, wat betekent dat ze van buiten de klasse kunnen worden benaderd en aangepast. Er zijn echter situaties waarin je de toegang tot bepaalde eigenschappen wilt beperken, zodat deze alleen binnen de klasse zelf kunnen worden benaderd of aangepast. Dit worden private eigenschappen genoemd.

Private eigenschappen helpen om een duidelijke scheiding te maken tussen de interne werking van de klasse en externe code. Ze zijn nuttig wanneer je gevoelige gegevens wilt verbergen of ongewenste wijzigingen aan een eigenschap van buiten de klasse wilt voorkomen.

Zie het als de motor van een auto. Je kunt de auto besturen en de bedieningselementen gebruiken, maar je hebt tijdens het rijden geen directe toegang tot de motoronderdelen. De motor is beschermd tegen externe inmenging en alleen bevoegde monteurs (klassemethode) kunnen aanpassingen doen.

Hoe private velden in een klasse te declareren en te gebruiken

In JavaScript worden private eigenschappen gedeclareerd met behulp van de #-syntaxis (geïntroduceerd in ES2020). Door een eigenschapsnaam vooraf te laten gaan door #, maak je deze privé, wat betekent dat deze alleen binnen de klasse zelf toegankelijk is.

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 dit voorbeeld is #type een privéveld. Het kan niet worden benaderd of gewijzigd buiten de Animal-klasse. Elke poging om #type direct vanuit een instantie te benaderen (zoals lion.#type) resulteert in een syntaxfout. Dit zorgt ervoor dat gevoelige of kritieke gegevens alleen via gecontroleerde methoden binnen de klasse kunnen worden aangepast.

Voordelen van privé-eigenschappen

  1. Privé-eigenschappen beschermen gevoelige gegevens door externe toegang te voorkomen. Ze zorgen ervoor dat gegevens alleen via specifieke methoden kunnen worden gewijzigd, waardoor het risico op toevallige of ongeautoriseerde wijzigingen wordt verminderd;
  2. Privé-eigenschappen maken het mogelijk implementatiedetails te verbergen, waardoor interne logica wordt afgeschermd van de gebruiker. Dit bevordert een duidelijke scheiding van verantwoordelijkheden en houdt de code modulair;
  3. Met privé-eigenschappen is er meer controle over hoe gegevens binnen een klasse worden benaderd en gewijzigd, zodat aanpassingen alleen via goed gedefinieerde methoden plaatsvinden.

Praktijkvoorbeeld: Bankrekening

Beschouw een praktijkvoorbeeld van het beheren van een bankrekening saldo. Bij een bank is het saldo van je rekening beschermd en kan niemand er direct toegang toe krijgen of het wijzigen. Je kunt er alleen mee omgaan via geautoriseerde processen zoals stortingen en opnames. Op dezelfde manier kunnen we privé-eigenschappen in een klasse gebruiken om het veld saldo te beschermen tegen directe toegang of wijziging.

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 dit voorbeeld is het veld #balance privé en kan alleen worden benaderd via publieke methoden zoals deposit, withdraw en getBalance. Dit zorgt ervoor dat het saldo op een gecontroleerde manier wordt aangepast, waardoor het beschermd is tegen ongeautoriseerde toegang of manipulatie.

1. Wat is de belangrijkste reden om privé-eigenschappen in een klasse te gebruiken?

2. Hoe declareer je een privé-eigenschap?

3. Wat gebeurt er als je een privé-eigenschap van buiten een klasse probeert te benaderen?

question mark

Wat is de belangrijkste reden om privé-eigenschappen in een klasse te gebruiken?

Select the correct answer

question mark

Hoe declareer je een privé-eigenschap?

Select the correct answer

question mark

Wat gebeurt er als je een privé-eigenschap van buiten een klasse probeert te benaderen?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 1. Hoofdstuk 7

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Awesome!

Completion rate improved to 2.22

bookWerken met Private Eigenschappen in Klassen

Veeg om het menu te tonen

In klasse-gebaseerde programmering zijn er vaak situaties waarin directe toegang tot bepaalde eigenschappen beperkt moet worden om de integriteit van gegevens te waarborgen en te controleren hoe deze worden aangepast.

Wat zijn private eigenschappen?

In JavaScript zijn klasse-eigenschappen doorgaans publiek, wat betekent dat ze van buiten de klasse kunnen worden benaderd en aangepast. Er zijn echter situaties waarin je de toegang tot bepaalde eigenschappen wilt beperken, zodat deze alleen binnen de klasse zelf kunnen worden benaderd of aangepast. Dit worden private eigenschappen genoemd.

Private eigenschappen helpen om een duidelijke scheiding te maken tussen de interne werking van de klasse en externe code. Ze zijn nuttig wanneer je gevoelige gegevens wilt verbergen of ongewenste wijzigingen aan een eigenschap van buiten de klasse wilt voorkomen.

Zie het als de motor van een auto. Je kunt de auto besturen en de bedieningselementen gebruiken, maar je hebt tijdens het rijden geen directe toegang tot de motoronderdelen. De motor is beschermd tegen externe inmenging en alleen bevoegde monteurs (klassemethode) kunnen aanpassingen doen.

Hoe private velden in een klasse te declareren en te gebruiken

In JavaScript worden private eigenschappen gedeclareerd met behulp van de #-syntaxis (geïntroduceerd in ES2020). Door een eigenschapsnaam vooraf te laten gaan door #, maak je deze privé, wat betekent dat deze alleen binnen de klasse zelf toegankelijk is.

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 dit voorbeeld is #type een privéveld. Het kan niet worden benaderd of gewijzigd buiten de Animal-klasse. Elke poging om #type direct vanuit een instantie te benaderen (zoals lion.#type) resulteert in een syntaxfout. Dit zorgt ervoor dat gevoelige of kritieke gegevens alleen via gecontroleerde methoden binnen de klasse kunnen worden aangepast.

Voordelen van privé-eigenschappen

  1. Privé-eigenschappen beschermen gevoelige gegevens door externe toegang te voorkomen. Ze zorgen ervoor dat gegevens alleen via specifieke methoden kunnen worden gewijzigd, waardoor het risico op toevallige of ongeautoriseerde wijzigingen wordt verminderd;
  2. Privé-eigenschappen maken het mogelijk implementatiedetails te verbergen, waardoor interne logica wordt afgeschermd van de gebruiker. Dit bevordert een duidelijke scheiding van verantwoordelijkheden en houdt de code modulair;
  3. Met privé-eigenschappen is er meer controle over hoe gegevens binnen een klasse worden benaderd en gewijzigd, zodat aanpassingen alleen via goed gedefinieerde methoden plaatsvinden.

Praktijkvoorbeeld: Bankrekening

Beschouw een praktijkvoorbeeld van het beheren van een bankrekening saldo. Bij een bank is het saldo van je rekening beschermd en kan niemand er direct toegang toe krijgen of het wijzigen. Je kunt er alleen mee omgaan via geautoriseerde processen zoals stortingen en opnames. Op dezelfde manier kunnen we privé-eigenschappen in een klasse gebruiken om het veld saldo te beschermen tegen directe toegang of wijziging.

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 dit voorbeeld is het veld #balance privé en kan alleen worden benaderd via publieke methoden zoals deposit, withdraw en getBalance. Dit zorgt ervoor dat het saldo op een gecontroleerde manier wordt aangepast, waardoor het beschermd is tegen ongeautoriseerde toegang of manipulatie.

1. Wat is de belangrijkste reden om privé-eigenschappen in een klasse te gebruiken?

2. Hoe declareer je een privé-eigenschap?

3. Wat gebeurt er als je een privé-eigenschap van buiten een klasse probeert te benaderen?

question mark

Wat is de belangrijkste reden om privé-eigenschappen in een klasse te gebruiken?

Select the correct answer

question mark

Hoe declareer je een privé-eigenschap?

Select the correct answer

question mark

Wat gebeurt er als je een privé-eigenschap van buiten een klasse probeert te benaderen?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 1. Hoofdstuk 7
some-alt