Dichiarare membri privati



L'ultimo aspetto da considerare è la definizione dei membri privati. Essi non sono accessibili dall'esterno proprio perchè non sono contenuti nel mega oggetto ritornato dalla funzione principale (che, ricordiamo, viene subito invocata).

Questi membri infatti hanno uno scope limitato ed esistono solo all'interno della funzione che definisce l'oggetto. Essi non possono essere disponibili proprio perché non c'è modo di riferirsi a questa funzione in quanto non viene salvata in nessuna variabile ma viene eseguita subito. Questi membri privati però sono accessibili all'interno di metodi e proprietà pubbliche in quanto condividono lo scope tra di loro. Ecco un esempio:

var NameModule = function() { 


  // variabile privata
  var name = "Alberto";

  // metodo privato
  var getName = function() { return name; }

  // il modulo ritorna l'oggetto pubblico
  return {
       alertName: function() { alert(getName()); } 
  }
}();

var nm = NameModule; 
nm.alertName();

In questo breve esempio abbiamo creato una proprietà privata (name), un metodo privato (getName) che legge la proprietà privata e un metodo pubblico (alertName) che invoca la funzione JavaScript alert passandogli come parametro il risultato della funzione privata getName.

Bisogna evidenziare il fatto che non abbiamo utilizzato la parola chiave 'this', per evitare problemi di scope. Infatti essa fa riferimento ad un contesto che è esterno al nostro oggetto, nel momento in cui invochiamo il metodo alertName().

Anche quando invochiamo il metodo privato getName() all'interno del metodo pubblico, evitiamo di utilizzare il costrutto this: il metodo getName non esiste all'interno dell'oggetto ritornato (che presenta un unico membro che è alertName), ma è accessibile direttamente in quanto facente parte dello scope di invocazione.

È importante specificare che sia la proprietà name, sia la funzione getName devono essere precedute dalla parola chiave var, nella dichiarazione, altrimenti vengono considerate variabili globali (proprietà dell'oggetto window).

In questo modo otteniamo ciò che desideriamo: la proprietà name e il metodo getName sono accessibili solamente dai membri pubblici della classe e non dall'esterno.

Ci sarebbe da aggiungere che questi elementi, name e getName, sono sì privati rispetto allo scope esterno, ma rispetto agli scope annidati diventano privilegiati e per convenzione andrebbero scritte con un underscore (_) anteposto all'identificatore.

Ultimi articoli JavaScript

PhantomJS, headless browser per test con Javascript

Il tool ideale per realizzare, da terminale, operazioni in remoto su...

Creare e leggere QR Code in JavaScript

Applicazioni 'QR Code enabled' per il Web e per il mobile,...

Jquery UI Map: web-mapping con Google Maps e jQuery

Un plugin di jQuery UI per intefacciare applicaizoni Web/mobile con...

Scrollorama e Scrolldeck, slideshow d'effetto con jQuery

Plugin jQuery per ottenere Slideshow con diversi effetti di scrolling

jCanvas, un primo semplice grafico

Alla scoperta della libreria jCanvas, per semplificare il disegno e...

Altri articoli

Guide JavaScript

Guida Node.js

Il framework che permette di per usare V8, l'interprete JavaScript...

Canvas, guida ai framework

Canvas, tra gli elementi di HTML5 è forse quello di maggior impatto....

Guida Javascript: tecniche avanzate

Una guida dal taglio pratico per approfondire la programmazione a...

Altre guide

Newsletter @JavaScript

Ogni martedì, direttamente nella tua e-mail: guide, articoli, script, novità e approfondimenti tecnici su JavaScript.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Webmaster base

18 Giugno 2012 a Milano
Disponibilità: 6 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso JQuery e Ajax per Webmaster

03 Luglio 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti

Corso Webmaster base

11 Giugno 2012 a Roma
Disponibilità: 7 Posti