Estoy intentando que un objeto javascript ejecute un método diferido y cuando es .done() llame una función en ese mismo objeto. Tengo problemas porque "esto" se convierte en el objeto diferido en lugar del objeto que lo llamó.Cambios diferidos de JQuery "esto"
PageObject.prototype.successFunction = function() {
console.log(arguments);
return console.log(this.name + " Success function called");
};
PageObject.prototype.loadPage = function(url) {
return $.when($.mobile.loadPage("pages/" + url))
.done(this.successFunction);
};
var pg = new PageObject();
pg.loadPage("test.html");
¿Cómo envío "esto" a la función success? Este PageObject va a ser ampliado por otros también, por lo que saber "esto" al ejecutar SuccessFunction será muy útil.
Parece simple, y probablemente tenga una respuesta simple. Estaba investigando .apply() pero no estoy seguro de que haya sido útil. Este post sobre el desbordamiento de la pila fue útil un poco, pero se rompió en el momento en que lo puse en la función .done().
Functions as parameters (with parameters) -- JavaScript
FWIW, el objeto diferido no está cambiando esto, es solo cómo funcionan las funciones. El valor de esto no está determinado por cómo/dónde se define una función, sino cómo se llama. –