JQuery Ajax e campo Oggetto

Ho questo codice:

MyObject = function(){ this.field = null; this.build = function(){ var my_url = "..."; var my_data = "..."; $.get(my_url, my_data, function(result){ this.field = result; }); } this.get = function(){ return this.field; } } object = new MyObject(); object.build(); my_result = object.get() 

my_result ora è null perché quando viene eseguita la funzione interna this non è il mio object.
Quindi, come posso impostare this.field con il valore restituito da $.get this.field ???

Nella parte superiore del tuo costruttore, fai:

 var self = this; 

questo crea una nuova variabile con scope che fa riferimento all’object corrente.

Quindi nel richiamo AJAX fare:

 self.field = result; 
 MyObject = function(){ this.field = null; this.build = function(cb){ var my_url = "..."; var my_data = "..."; var self = this; $.get(my_url, my_data, function(result){ self.field = result; cb(result); }); } this.get = function(){ return this.field; } } object = new MyObject(); object.build(function(field) { console.log(object.get() === field); }); 

Ti consiglio di passare una richiamata alla tua funzione di compilazione in modo da poter essere avvertita immediatamente quando il tuo campo è impostato.

Anche posizionando var self = this all’interno del metodo garantisce che è ansible chiamare object.build.call(scope, f) senza che sia associato all’ambito sbagliato.

Questo modello è particolarmente utile nell’ereditarietà quando si desidera chiamare un metodo di un’altra class.

In futuro, prova a utilizzare il modello di modulo:

ECCO IL MODELLO DEL MODULO:

  

ECCO CHE COSA IL TUO OGGETTO POTREBBE PIACERE:

 var myNamespace = (function($) { var publicInstances = {}; // *********************** // myObject publicInstances.myObject = myObject; function myObject(url, data) { /// A pointer to this var self = this; /// Contains the result this.field = null; // Name this result instead. this.url = url; this.data = data; this.initialize = function() { /// Initialize whatever } this.build = function() { $.get(self.url, self.data, function(result) { self.field = result; cb(self.field); }); } this.cb = function(result) { /// Do whatever } self.initialize(); } return publicInstances; })(jQuery);