2012-02-05 19 views
5

ho un piccolo problema in programmazione ad oggetti in JavaScript'questo' riferimento in JavaScript

C'è una "classe" Task, ha diversi metodi, un metodo che contiene un asincrona l'invio di una richiesta con l'aiuto di JQuery ($.ajax). Dopo che la richiesta è andata a buon fine, è necessario eseguire un particolare metodo (ad esempio SuccessFunction) della classe Task.

Il problema è, dopo la query nel corpo del successFunction è impossibile riferirsi alla classe utilizzando la parola chiave this, perché il contesto è cambiato, e questo contiene un riferimento alla jquery-oggetto che esegue un ajax-request.

Quali varianti si riferiscono all'attuale oggetto Task all'interno di una funzione che non è stata causata direttamente ma esternamente? (Ad esempio per un evento o Ajax)

risposta

9

Normalmente all'interno di un evento AJAX come la callback di successo, this fa riferimento all'oggetto restituito dalla chiamata $.ajax. Si potrebbe utilizzare il parametro context per cambiare il contesto nella callback successo:

$.ajax({ 
    url: '/foo', 
    context: this, // <!-- change the context of the success callback 
    success: function(result) { 
     // 'this' here will refer to whatever it refered outside 
    } 
}); 

si potrebbe anche passare oggetti complessi:

$.ajax({ 
    url: '/foo', 
    context: { element: this, foo: 'bar' }, 
    success: function(result) { 
     // you can use 'this.element' and 'this.foo' here 
    } 
}); 
+0

Grazie, questo è esattamente quello che mi serve. – JN0iZzze

7

È possibile definire una variabile che contiene il riferimento all'oggetto:

function Task() { 
    var that = this; 
    this.call = function() { 
    $.ajax({ 
     url: '/foo', 
     success: function(result) { 
     console.log(that); // <-- you cann access this object via that 
     } 
    }); 
    }; 
} 
+0

+1, per 'that'. –

+0

+1, Crockford "quello" stile. – dwerner