Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Accesso alle proprietà della classe

Controllare l'accesso alle proprietà degli oggetti per mantenere il controllo dei valori in ingresso o sia per impedire l'accesso in scrittura.
Controllare l'accesso alle proprietà degli oggetti per mantenere il controllo dei valori in ingresso o sia per impedire l'accesso in scrittura.
Link copiato negli appunti

Le proprietà di una classe TypeScript sono accessibili in lettura e scrittura per impostazione predefinita, come avviene anche per JavaScript. Tuttavia, in determinate situazioni vorremmo poter controllare l'accesso alle proprietà sia per effettuare eventuali controlli prima dell'assegnamento di un valore, sia per impedire ad esempio l'accesso in scrittura. Consideriamo il seguente esempio:

class Persona {
    nome: string;
    cognome: string;
    nomeCompleto: string; 
	constructor(nome, cognome) {
		this.nome = nome;
		this.cognome = cognome;
		this.nomeCompleto = nome + ' ' + cognome;
    }
}

Abbiamo aggiunto alla classe Persona la proprietà nomeCompleto che contiene la concatenazione del valore delle proprietà nome e cognome. Naturalmente nell'intenzione dello sviluppatore il valore di questa nuova proprietà dovrebbe essere sincronizzato con il valore delle due proprietà da cui dipende. Ma dal momento che la proprietà nomeCompleto è liberamente accessibile in lettura e scrittura, è possibile assegnare un valore che non corrisponde alla concatenazione di nome e cognome.

get

Per ottenere il comportamento desiderato possiamo definire la proprietà in sola lettura sfruttando l'accessor get, come avviene anche per le classi ECMAScript 6.

class Persona {
    nome: string;
    cognome: string; 
	constructor(nome, cognome) {
		this.nome = nome;
		this.cognome = cognome;
	}
	get nomeCompleto(): string {
		return this.nome + ' ' + this.cognome;
    }
}

In questo caso non avremo modo di modificare direttamente la proprietà nomeCompleto in quanto è in sola lettura ed il suo valore è direttamente calcolato dalle proprietà nome e cognome.

var marioRossi = new Persona("Mario", "Rossi");
console.log(marioRossi.nomeCompleto);		//Mario Rossi 
marioRossi.nomeCompleto = "Giuseppe Verdi";
console.log(marioRossi.nomeCompleto);		//Mario Rossi

set

Possiamo consentire la modifica di una proprietà tramite l'accessor set potendo in questo modo controllare la logica di assegnamento dei valori. Ad esempio, potremmo consentire l'accessibilità in scrittura della nostra proprietà nomeCompleto facendo in modo che il valore assegnato vada a modificare i valori di nome e cognome:

class Persona {
	nome: string;
	cognome: string;
	constructor(nome, cognome) {
		this.nome = nome;
		this.cognome = cognome;
	}
	get nomeCompleto(): string {
		return this.nome + ' ' + this.cognome;
    } 
	set nomeCompleto(valore: string) {
		var parti = valore.toString().split(' ');
		this.nome = parti[0] || '';
		this.cognome = parti[1] || '';
    }
}

Come possiamo vedere dall'esempio, assumendo che nome e cognome siano separati da uno spazio, assegniamo la prima parte del nome completo alla proprietà nome e la seconda parte alla proprietà cognome. Assegnando quindi un valore alla proprietà nomeCompleto otterremo quanto mostrato dal seguente esempio:

var marioRossi = new Persona('Mario', 'Rossi');
console.log(marioRossi.nomeCompleto);		//Mario Rossi 
marioRossi.nomeCompleto = 'Giuseppe Verdi';
console.log(marioRossi.nomeCompleto);		//Giuseppe Verdi
console.log(marioRossi.nome);				//Giuseppe
console.log(marioRossi.cognome);			//Verdi

Ti consigliamo anche