J'essaie de configurer un objet afin qu'il ait une méthode $ .getJSON encapsulée. Voici ma configuration:
function Property(price, deposit){ this.price = price; this.deposit = deposit; this.getMortgageData = function(){ $.getJSON('http://example.com/index?p='+this.price+'&d='+this.deposit+'&c=?', function(data){ this.mortgageData = data; }); } return true; }
Maintenant, le problème semble être que je n'ai pas accès à «ceci» dans la fonction de rappel de getJSON qui a du sens.
Existe-t-il une solution de rechange pour ce type de fonction ou est-ce que je pense simplement à ce problème? Je n'ai jamais vraiment codé en utilisant PHP OO avant alors JS OO est un peu nouveau pour moi.
D'autres choses que j'ai essayé sont:
function Property(price, deposit){ this.price = price; this.deposit = deposit; this.getMortgageData = function(){ this.mortgageData = $.getJSON('http://example.com/index?p='+this.price+'&d='+this.deposit+'&c=?', function(data){ return data; }); } return true; }
Mais reste,
var prop = new Property(); prop.getMortgageData(); // wait for the response, then alert(prop.mortgageData.xyz); // == undefined
Votre première tentative est proche, mais comme vous l'avez dit, vous ne pouvez pas accéder à this
dans le rappel parce qu'il se réfère à autre chose. Au lieu de cela, attribuez this
à un autre nom dans la portée externe, et accédez à cela. Le rappel est une fermeture et aura accès à cette variable dans la portée externe:
function Property(price, deposit){ this.price = price; this.deposit = deposit; var property = this; // this variable will be accessible in the callback, but still refers to the right object. this.getMortgageData = function(){ $.getJSON('http://example.com/index?p='+this.price+'&d='+this.deposit+'&c=?', function(data){ property.mortgageData = data; }); } return true; }