Applicazione degli oggetti ECMAScript

La creazione e la distruzione degli oggetti avvengono durante l'esecuzione di JavaScript, comprendere il significato di questo paradigma è fondamentale per comprendere l'intero linguaggio.

Dichiarazione e istanziazione

Il modo di creare un oggetto è utilizzare la parola chiave new seguita dal nome della classe da istanziare:

var oObject = new Object();
var oStringObject = new String();

La prima riga di codice crea un'istanza della classe Object e la memorizza nella variabile oObject. La seconda riga di codice crea un'istanza della classe String e la memorizza nella variabile oStringObject. Se il costruttore non ha parametri, i parentesi non sono necessari. Pertanto, è possibile riscrivere le due righe precedenti nel seguente modo:

var oObject = new Object;
var oStringObject = new String;

Riferimento agli oggetti

Nelle sezioni precedenti, abbiamo introdottoConcetto di tipo di riferimentoIn ECMAScript, non è possibile accedere alla rappresentazione fisica degli oggetti, ma solo ai loro riferimenti. Ogni volta che si crea un oggetto, ciò che viene memorizzato nella variabile è un riferimento all'oggetto, non l'oggetto stesso.

Dereferenziazione degli oggetti

ECMAScript ha una routine di raccolta dei rifiuti (garbage collection routine), il che significa che non è necessario distruggere esplicitamente gli oggetti per liberare la memoria. Quando non ci sono più riferimenti agli oggetti, si dice che l'oggetto è stato dereferenziato. Durante l'esecuzione della routine di raccolta dei rifiuti, tutti gli oggetti dereferenziati vengono distrutti. Ogni volta che una funzione esegue il suo codice, la routine di raccolta dei rifiuti viene eseguita, liberando tutte le variabili locali, e in alcune altre situazioni non prevedibili, la routine di raccolta dei rifiuti viene anche eseguita.

Impostare tutte le referenze dell'oggetto su null può forzare l'eliminazione dell'oggetto. Ad esempio:

var oObject = new Object;
// qui fare qualcosa con l'oggetto
oObject = null;

Quando la variabile oObject viene impostata su null, non esiste più una referenza al primo oggetto creato. Questo significa che la prossima volta che viene eseguito il programma di raccolta dei set di memoria inutilizzati, l'oggetto sarà distrutto.

Ogni volta che si utilizza un oggetto, è una buona abitudine eliminarlo per liberare la memoria. Questo garantisce anche che non si utilizzi più un oggetto che non è più accessibile, prevenendo errori di progettazione del programma. Inoltre, gli vecchi browser (come IE/MAC) non hanno un programma di raccolta dei set di memoria inutilizzati completo, quindi durante il caricamento della pagina, l'oggetto potrebbe non essere distrutto correttamente. Eliminare l'oggetto e tutte le sue proprietà è il miglior metodo per garantire l'uso corretto della memoria.

Attenzione:Attenzione: quando si eliminano tutte le referenze a un oggetto, è necessario fare attenzione. Se un oggetto ha due o più referenze, per eliminare correttamente l'oggetto, è necessario impostare tutte le sue referenze su null.

Legame anticipato e tardivo

Il legame (binding) è il metodo di combinare l'interfaccia dell'oggetto con l'istanza dell'oggetto.

Il legame anticipato (early binding) si riferisce a definire le proprietà e i metodi dell'oggetto prima della sua istanziazione, in modo che il compilatore o l'interprete possa tradurre anticipatamente il codice macchina. In linguaggi come Java e Visual Basic, con il legame anticipato, è possibile utilizzare IntelliSense (ovvero la funzione che fornisce all'utente una lista delle proprietà e dei metodi dell'oggetto) durante l'ambiente di sviluppo. ECMAScript non è un linguaggio a tipo forte, quindi non supporta il legame anticipato.

D'altra parte, il legame tardivo (late binding) si riferisce al fatto che il compilatore o l'interprete non conoscono il tipo dell'oggetto prima dell'esecuzione. Utilizzando il legame tardivo, non è necessario controllare il tipo dell'oggetto, è sufficiente verificare se l'oggetto supporta attributi e metodi. Tutti i variabili ECMAScript utilizzano il metodo di legame tardivo. Questo permette di eseguire molte operazioni sugli oggetti senza alcuna penalità.