2011-01-27 6 views
6

カプセル化された$ .getJSONメソッドを持つようにオブジェクトを設定しようとしています。ここに私のセットアップがある:

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

今の問題は、私は理にかなってgetJSONコールバック関数内のthisへのアクセス権を持っていないということのようです。

このタイプの機能の回避策はありますか、まったく間違っていると思いますか?私は今までPHP OOを使用してコード化してきましたが、JS OOは少し新しくなっています。私が試した

他のものは以下のとおりです。

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

しかし、それでもまだ、

var prop = new Property(); 
prop.getMortgageData(); 
// wait for the response, then 
alert(prop.mortgageData.xyz); // == undefined 

答えて

8

あなたの最初の試みは近いですが、あなたが言ったように、あなたがするので、コールバック内thisにアクセスすることはできませんそれは他のことを指しています。代わりに、外側のスコープ内の別の名前にthisを割り当て、それにアクセスします。コールバックはクロージャであり、外側のスコープ内のその変数にアクセスできます。

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

ありがとう、それは完全に機能しました。 –

+0

あなたは大歓迎です! – kevingessner

関連する問題