Il rischio che corriamo spesso con le funzioni di callback di jQuery è quello di creare eccessivi annidamenti che complicano inutilmente il nostro codice. In JavaScript esistono i metodi
call()
ed apply()
che ci consentono di modificare il contesto di esecuzione di un metodo o di una funzione. jQuery implementa $.proxy()
.
Ecco un esempio tipico di eccessivo annidamento:
var MyClass = function () {
this.setUpEvents = function () {
$( "a" ).click(function ( event ) {
console.log( $( event.target ) );
});
}
}
Possiamo separare il codice eseguito nell'evento dal metodo setUpEvents()
in questo modo:
var MyClass = function() {
this.setUpEvents = function() {
$( "a" ).click( $.proxy( this, "clickMethod" ) );
}
this.clickMethod = function( event ) {
console.log( $( event.target ) );
}
};
Il metodo $.proxy()
accetta come primo parametro l'oggetto che diventerà il contesto di esecuzione della funzione passata come secondo parametro. In questo caso la parola chiave
this
fa riferimento all'elemento a
corrente. In questo modo tale elemento corrisponderà alla proprietà target
dell'oggetto event
usata nel metodo
clickMethod()
.
I vantaggi di questo metodo sono principalmente l'indipendenza del codice da un determinato contesto e la maggiore semplicità nella struttura dello stesso.