Il costruttore Hash è una delle classi native non-standard introdotta da MooTools. Le sue funzionalità permettono di superare i limiti imposti dal costruttore Object del Javascript nativo (ricordate, MAI toccare l'oggetto Object.prototype
, per questo è nato l'oggetto Hash.prototype
!) e "mappare" quindi un normale oggetto.
Immaginate un Hash come una sorta di array sul quale è possibile iterare e compiere tutte quelle interessanti operazioni di estensione e combinamento, ma al posto di indici e valori abbiamo le accoppiate keyword e value tipiche degli oggetti.
La classe Hash accetta un solo parametro che è l'oggetto (o un altro Hash) da mappare e ne restituisce l'istanza. Con quest'ultima possiamo compiere le più svariate operazioni: dai semplici setting e getting di proprietà e valori fino alle diverse iterazioni. Vediamo un esempio:
// creiamo un Hash var hash = new Hash({ color: 'blue', getColor: function() { return this.color; } }); // usiamo i suoi metodi // true, esiste la proprietà color hash.has('color'); // setta una nuova proprietà hash.set('otherColor', 'green'); // ottieni le keywords var keys = hash.getKeys(); // ottieni i valori var values = hash.getValues();
Ed ora passiamo alle iterazioni (i metodi each
e map
sono davvero molto simili ai rispettivi offerti dalla classe Array):
// creriamo un nuovo Hash var hash = new Hash({first: 'red', second: 'blue', third: 'green'}); // effettua gli alert per ogni elemento: 'The first is red', 'The second is blue' e cosi via hash.each(function(value, key){ alert('The ' key + " is: " + value); }); // operazione di "mapping" su di un nuovo hash var double = new Hash({a: 1, b: 2, c: 3}).map(function(item, index){ return item * 2; }); // double è ora uguale a {a: 2, b: 4, c: 6}
Da questi esempi risulta chiaro come sia semplice iterare ed alterare la struttura di un Hash, come se si trattasse di un array "speciale".
Hash interni
Sono molti gli hash usati internamente a MooTools per adempiere ai più svariati compiti, data la loro elevata flessibilità. Gli Hash Element.Properties, Element.Attributes, Element.Events ed Element.Styles controllano le varie caratteristiche degli elementi, mentre l'Hash Browser permette di identificare, tramite la sua proprietà "Engine" il browser correntemente in uso. Ancora troviamo l'Hash Selectors.Pseudo che permette di creare selettori personalizzati, l'Hash JSON e molti altri ancora.
Conclusione
Come abbiamo potuto vedere, lavorare e iterare su di un oggetto non è più impossibile o complicato, grazie alla classe Hash. Non dimentichiamo inoltre che l'oggetto prototype
di Hash contiene molti altri metodi utilissimi oltre a quelli presentati in questa lezione: extend
, combine
, filter
ed every
(simili ai cicli di iterazione studiati nella lezione dedicata al costruttore Array) e altri ancora. Ecco a voi il link alla pagina della documentazione ufficiale dove potete trovare la lista completa.