Utilisation de $ .getJSON () avec rappel dans un objet Javascript

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; }