Introduzione al Modello di Oggetto Letterale
Indice
Il modello di Oggetto Letterale offre un modo per organizzare il comportamento del codice. È anche un mezzo per mantenere il codice libero da “contaminazioni del namespace globale“, che è una buona pratica per tutti i progetti e imperativo per quelle più grandi. Questo costringe a pensare fin dall’inizio su ciò che il codice farà e quali pezzi devono essere in un dato posto affinché avvenga. Un Oggetto Letterale è un modo per incapsulare i relativi comportamenti, come illustrato di seguito:
Un oggetto letterale
var myObjectLiteral = {
myBehavior1 : function() {
/* Fare qualcosa */
},
myBehavior2 : function() {
/* Fare qualcosa di diverso */
}
};
A titolo di esempio e artificialmente semplicistico, si supponga di avere come nell’esempio seguente del codice per mostrare e nascondere il contenuto quando un elemento della lista viene cliccato.
$(document).ready(function() {
$('#myFeature li')
.append('<div/>')
.each(function() {
$(this).find('div')
.load('foo.php?item=' + $(this).attr('id'));
})
.click(function() {
$(this).find('div').show();
$(this).siblings().find('div').hide();
});
});
Abbastanza semplice, eppure anche in questo esempio ci sono diverse cose che si potrebbe desiderare di cambiare in seguito – per esempio, il modo in cui determinare l’URL per caricare il contenuto, la destinazione del contenuto caricato, o il mostrare e nascondere il contenuto. Una rappresentazione di funzioni in un Oggetto Letterale separa nettamente questi aspetti. Potrebbe apparire così:
var myFeature = {
config : {
wrapper : '#myFeature',
container : 'div',
urlBase : 'foo.php?item='
},
init : function(config) {
$.extend(myFeature.config, config);
$(myFeature.config.wrapper).find('li').
each(function() {
myFeature.getContent($(this));
}).
click(function() {
myFeature.showContent($(this));
});
},
buildUrl : function($li) {
return myFeature.config.urlBase + $li.attr('id');
},
getContent : function($li) {
$li.append(myFeature.config.container);
var url = myFeature.buildUrl($li);
$li.find(myFeature.config.container).load(url);
},
showContent : function($li) {
$li.find('div').show();
myFeature.hideContent($li.siblings());
},
hideContent : function($elements) {
$elements.find('div').hide();
}
};
$(document).ready(function() { myFeature.init(); });
Perché l’esempio iniziale era incredibilmente semplicistico, l’incarnazione dell’Oggetto Letterale è più lungo. A dire il vero, il metodo dell’Oggetto Letterale generalmente non vi farà risparmiare righe di codice. La cosa fà risparmiare è mal di testa. Utilizzando un Oggetto Letterale, abbiamo diviso il nostro codice nelle sue parti logiche, rendendo più facile d’individuare le cose che si potrebbero desiderare di cambiare in futuro. Abbiamo fatto la nostra funzione estendibile, fornendo la possibilità di sovrascrivere le impostazioni predefinite. E abbiamo un numero limitato di auto-documentazione – è facile vedere a colpo d’occhio ciò che fa la funzione. Appena le nostre esigenze crescono oltre la semplicità di questo esempio i benefici della struttura diventerà più chiara, come si vedrà di seguito.
Ancora nessun commento