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.