Primi passi con gli oggetti JavaScript per sviluppatori jQuery

Primi passi con gli oggetti JavaScript per sviluppatori jQuery

Tempo fa Davide mi ha fatto notare che molti miei articoli sulla programmazione orientata agli oggetti erano interessanti ma piuttosto ostici per chi non mastica pane e programmazione. In questo articolo vorrei affrontare nuovamente l'argomento dal punto di vista di chi usa jQuery ma non è molto addentro alle problematiche relative agli oggetti.

Oggetti: cosa sono?

Quando descriviamo un oggetto reale parliamo del suo colore, della sua forma, del suo peso e così via, ossia parliamo delle sue proprietà. Le proprietà non sono altro che dei tratti distintivi dell'oggetto. Queste proprietà possono avere dei valori, ad esempio:

Scatola:
	colore = blu
	forma = rettangolare
	peso = 5Kg

Una scatola è un oggetto, e come potete vedere ha proprietà e valori. Gli oggetti JavaScript sono la stessa cosa: una collezione di coppie di proprietà e valori.

Tuttavia gli oggetti sarebbero alquanto inutili se contenessero solo dati. In fondo, penserete, ci sono già gli array per questo. Invece gli oggetti possono anche compiere delle azioni su questi dati, ossia sulle loro proprietà. Queste azioni si chiamano metodi, e sono le tradizionali funzioni JavaScript che già conoscete:

Scatola:
	colore = blu
	forma = rettangolare
	peso = 5Kg
	mostraPeso = funzione() {
	
		alert('Il peso è di ' + peso);
	
	}

Come si scrivono gli oggetti in JavaScript

Fino ad ora abbiamo usato una pseudo-rappresentazione degli oggetti. Vediamo ora come vengono effettivamente scritti in JavaScript.

Oggetti letterali

Questi oggetti li avrete sicuramente usati nelle opzioni dei plugin jQuery. Hanno questa struttura:


var Oggetto = {
   proprieta: valore,
   proprieta2: valore,
   //...
   
   proprietaN: valore
};

Ciascuna coppia proprietà/valore ha come separatore una virgola, tranne l'ultima. Le proprietà vengono separate dai loro valori tramite i due punti. Vediamo la rappresentazione del nostro oggetto Scatola:


var Scatola = {

	colore: 'blu',
	
	forma: 'rettangolare',
	
	peso: '5Kg',
	
	mostraPeso: function() {
	
		alert(this.peso);
	
	}


};

Non preoccupatevi per ora della parola chiave this. Concentriamoci invece su come i dati vengono scritti. Noterete infatti che i primi tre valori sono delle stringhe e quindi vanno racchiusi tra virgolette. Negli oggetti letterali infatti bisogna osservare strettamente le regole sui tipi di dati in JavaScript. Quindi i numeri, i riferimenti ad altri oggetti, i booleani, le espressioni regolari, null, undefined e gli array non hanno bisogno delle virgolette, ma le stringhe si.

Oggetti con costruttori

Per capire questi oggetti pensiamo a come viene realizzata una scatola. Prima si fa uno stampo della scatola e poi si crea fisicamente la scatola in base a quello stampo. In altre parole, prima si crea il modello e poi l'oggetto concreto.

Ecco come viene creato il modello con questi oggetti (lo stampo della scatola):


function Scatola(colore, forma, peso) {

	this.colore = colore;
	this.forma = forma;
	this.peso = peso;


}

La funzione Scatola accetta come suoi parametri i tre valori che andranno a definire le sue proprietà, ossia colore, forma e peso. Il nostro stampo quindi ci dice che l'oggetto che andremo a creare dovrà avere queste proprietà e come valori i valori passati alla funzione.

Ma come ci crea la scatola reale? Tramite l'operatore new posto davanti a Scatola:


var scatola = new Scatola('blu', 'rettangolare', '5Kg');

Il nostro oggetto finale, la nostra scatola stampata, è ora tutto in scatola, che contiene tutte le sue proprietà e i suoi valori.

Riassumendo: gli oggetti letterali creano in un unico passaggio il nostro oggetto finito, mentre gli oggetti con costruttori creano prima un modello dell'oggetto e poi l'oggetto finito.

Cos'è this?

Avrete capito che this è una parola chiave JavaScript. Nell'àmbito degli oggetti, this è un riferimento all'oggetto corrente. In altre parole, nel nostro caso è un alias di Scatola. Quindi nell'esempio degli oggetti con costruttore avremmo potuto anche scrivere:


function Scatola(colore, forma, peso) {

	Scatola.colore = colore;
	Scatola.forma = forma;
	Scatola.peso = peso;


}

E nell'esempio dell'oggetto letterale:


var Scatola = {

	colore: 'blu',
	
	forma: 'rettangolare',
	
	peso: '5Kg',
	
	mostraPeso: function() {
	
		alert(Scatola.peso);
	
	}


};

Attenzione a quando si usa questa parola chiave con jQuery. Bisogna sempre chiedersi: this si riferisce all'oggetto che penso? Non sempre. Infatti jQuery crea a sua volta degli oggetti e se usiamo questa parola chiave all'interno dei suoi oggetti o metodi quest'ultima farà riferimento a jQuery e non all'oggetto che vogliamo.

Esempio:


var Animator = {

	element: '#test',
	fade: function() {
	
		$(this.element).fadeOut('slow');
	
	}

};

Qui this si trova all'interno di $() ossia dell'oggetto jQuery e quindi fa riferimento a jQuery e non ad Animator! Il risultato restituirà undefined (un errore), perchè element non esiste come proprietà di jQuery.

Accedere alle proprietà di un oggetto

Si può accedere alle proprietà di un oggetto in due modi:

  1. con la notazione puntata (oggetto.proprieta)
  2. con la notazione a parentesi quadre (oggetto['proprieta'])

Esempi:


alert(Scatola.peso); // '5Kg'
alert(Scatola['peso']); // '5Kg'

Nel caso degli oggetti con costruttori bisogna prima usare l'operatore new:


var scatola = new Scatola('blu', 'rettangolare', '5Kg');
alert(scatola.peso); // '5Kg'
alert(scatola['peso']); // '5Kg'

Se la proprietà è una funzione, ossia un metodo dell'oggetto, occorre usare anche le doppie parentesi tonde, come in qualsiasi altra invocazione di funzione:


Scatola.mostraPeso(); // '5Kg'
Scatola['mostraPeso']();  // '5Kg'
Torna su