Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Gestione delle Proprietà Private nelle Classi | Padronanza delle Classi e dell'Ereditarietà in JavaScript
Padronanza Avanzata di JavaScript

bookGestione delle Proprietà Private nelle Classi

Nella programmazione basata su classi, spesso si desidera limitare l'accesso diretto a determinate proprietà per proteggere l'integrità dei dati e controllare come vengono modificate.

Cosa sono le Proprietà Private?

In JavaScript, le proprietà delle classi sono tipicamente pubbliche, il che significa che possono essere accessibili e modificate dall'esterno della classe. Tuttavia, ci sono situazioni in cui è necessario limitare l'accesso a determinate proprietà, assicurando che possano essere lette o modificate solo all'interno della classe stessa. Queste sono chiamate proprietà private.

Le proprietà private aiutano a creare un confine chiaro tra il funzionamento interno della classe e il codice esterno. Sono utili quando si desidera nascondere dati sensibili o prevenire modifiche indesiderate a una proprietà dall'esterno della classe.

Si può pensare alle proprietà private come al motore di un'auto. Mentre si può guidare l'auto e interagire con i suoi comandi, non si ha accesso diretto ai componenti del motore durante la guida. Il motore è protetto da manomissioni esterne e solo i meccanici autorizzati (i metodi della classe) possono effettuare regolazioni.

Come Dichiarare e Utilizzare i Campi Privati in una Classe

In JavaScript, le proprietà private si dichiarano utilizzando la sintassi # (introdotta in ES2020). Anteponendo il simbolo # al nome di una proprietà, questa diventa privata, ovvero può essere accessibile solo all'interno della classe stessa.

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 questo esempio, #type è un campo privato. Non può essere accessibile o modificato al di fuori della classe Animal. Qualsiasi tentativo di accedere direttamente a #type da un'istanza (come lion.#type) genererà un errore di sintassi. Questo garantisce che dati sensibili o critici vengano modificati solo tramite metodi controllati definiti nella classe.

Vantaggi delle Proprietà Private

  1. Le proprietà private proteggono i dati sensibili impedendo l'accesso esterno. Garantiscono che i dati possano essere modificati solo tramite metodi specifici, riducendo il rischio di modifiche accidentali o non autorizzate;
  2. Le proprietà private consentono di incapsulare i dettagli di implementazione, nascondendo la logica interna all'utente. Questo promuove una chiara separazione delle responsabilità e mantiene il codice modulare;
  3. Con le proprietà private, è possibile avere un controllo più preciso su come i dati vengono accessibili e modificati all'interno di una classe, assicurando che le modifiche avvengano tramite metodi ben definiti.

Esempio Reale: Conto Bancario

Consideriamo un'analogia reale relativa alla gestione del saldo di un conto bancario. In una banca, il saldo del tuo conto è protetto e nessuno può accedervi o modificarlo direttamente. È possibile interagire con esso solo tramite processi autorizzati come depositi e prelievi. Allo stesso modo, possiamo utilizzare proprietà private in una classe per proteggere il campo saldo dall'accesso o modifica diretta.

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 questo esempio, il campo #balance è privato e può essere accessibile solo tramite metodi pubblici come deposit, withdraw e getBalance. Questo garantisce che il saldo venga modificato in modo controllato, proteggendolo da accessi o manipolazioni non autorizzate.

1. Qual è la principale ragione per utilizzare proprietà private in una classe?

2. Come si dichiara una proprietà privata?

3. Cosa succede se si tenta di accedere a una proprietà privata dall'esterno di una classe?

question mark

Qual è la principale ragione per utilizzare proprietà private in una classe?

Select the correct answer

question mark

Come si dichiara una proprietà privata?

Select the correct answer

question mark

Cosa succede se si tenta di accedere a una proprietà privata dall'esterno di una classe?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 7

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Awesome!

Completion rate improved to 2.22

bookGestione delle Proprietà Private nelle Classi

Scorri per mostrare il menu

Nella programmazione basata su classi, spesso si desidera limitare l'accesso diretto a determinate proprietà per proteggere l'integrità dei dati e controllare come vengono modificate.

Cosa sono le Proprietà Private?

In JavaScript, le proprietà delle classi sono tipicamente pubbliche, il che significa che possono essere accessibili e modificate dall'esterno della classe. Tuttavia, ci sono situazioni in cui è necessario limitare l'accesso a determinate proprietà, assicurando che possano essere lette o modificate solo all'interno della classe stessa. Queste sono chiamate proprietà private.

Le proprietà private aiutano a creare un confine chiaro tra il funzionamento interno della classe e il codice esterno. Sono utili quando si desidera nascondere dati sensibili o prevenire modifiche indesiderate a una proprietà dall'esterno della classe.

Si può pensare alle proprietà private come al motore di un'auto. Mentre si può guidare l'auto e interagire con i suoi comandi, non si ha accesso diretto ai componenti del motore durante la guida. Il motore è protetto da manomissioni esterne e solo i meccanici autorizzati (i metodi della classe) possono effettuare regolazioni.

Come Dichiarare e Utilizzare i Campi Privati in una Classe

In JavaScript, le proprietà private si dichiarano utilizzando la sintassi # (introdotta in ES2020). Anteponendo il simbolo # al nome di una proprietà, questa diventa privata, ovvero può essere accessibile solo all'interno della classe stessa.

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 questo esempio, #type è un campo privato. Non può essere accessibile o modificato al di fuori della classe Animal. Qualsiasi tentativo di accedere direttamente a #type da un'istanza (come lion.#type) genererà un errore di sintassi. Questo garantisce che dati sensibili o critici vengano modificati solo tramite metodi controllati definiti nella classe.

Vantaggi delle Proprietà Private

  1. Le proprietà private proteggono i dati sensibili impedendo l'accesso esterno. Garantiscono che i dati possano essere modificati solo tramite metodi specifici, riducendo il rischio di modifiche accidentali o non autorizzate;
  2. Le proprietà private consentono di incapsulare i dettagli di implementazione, nascondendo la logica interna all'utente. Questo promuove una chiara separazione delle responsabilità e mantiene il codice modulare;
  3. Con le proprietà private, è possibile avere un controllo più preciso su come i dati vengono accessibili e modificati all'interno di una classe, assicurando che le modifiche avvengano tramite metodi ben definiti.

Esempio Reale: Conto Bancario

Consideriamo un'analogia reale relativa alla gestione del saldo di un conto bancario. In una banca, il saldo del tuo conto è protetto e nessuno può accedervi o modificarlo direttamente. È possibile interagire con esso solo tramite processi autorizzati come depositi e prelievi. Allo stesso modo, possiamo utilizzare proprietà private in una classe per proteggere il campo saldo dall'accesso o modifica diretta.

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 questo esempio, il campo #balance è privato e può essere accessibile solo tramite metodi pubblici come deposit, withdraw e getBalance. Questo garantisce che il saldo venga modificato in modo controllato, proteggendolo da accessi o manipolazioni non autorizzate.

1. Qual è la principale ragione per utilizzare proprietà private in una classe?

2. Come si dichiara una proprietà privata?

3. Cosa succede se si tenta di accedere a una proprietà privata dall'esterno di una classe?

question mark

Qual è la principale ragione per utilizzare proprietà private in una classe?

Select the correct answer

question mark

Come si dichiara una proprietà privata?

Select the correct answer

question mark

Cosa succede se si tenta di accedere a una proprietà privata dall'esterno di una classe?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 7
some-alt