2012-05-02 12 views
2

私はjavascriptとjQueryで実験を始めました。私はjsonファイルを指定されたdivにロードするクラスを作成しようとしていましたが、私は理解できない振る舞いに入ります:javascript jquery.getJSON奇妙な振る舞い

注:このコードはdivに何もロードされません。それは私が理解していない振る舞いを示すために見つけることができる最も簡単な例です。

function test(div) { 
    this.div = div; 
    _this = this; 
    jQuery.getJSON('/example.json', null, function(data) { 
     console.log(_this.div); 
    }); 
} 

私は

a = new test("a"); 
b = new test("b"); 

を実行したときに、私は出力として "AB" を参照してくださいすることが期待が、実際の出力が "BB" です。 しかし、最初の行を終了してから2番目の行を呼び出すと、期待される出力が表示されます。よくわかりません!

答えて

5

お客様の_thisは、グローバル変数です。その前にvarを追加してください。

作業例:ところでhttp://jsfiddle.net/SQRwn/

、あなたのコードが、それは次のようであれば正常に動作しますが、あなたがここに持っていることは、おそらくあなたが使用しようとしているコードではないでしょう...

function test(div) { 
    jQuery.getJSON('/example.json', null, function(data) { 
     console.log(div); 
    }); 
} 
2

あなたはそれがグローバル変数になり、あなたの変数の前にvarが含まれていない場合:

_this = this; 

ことshoudl
var _this = this; 
1

これは、変数_thisを適切にdelcareしなかったことが原因で、グローバルです。これに行を変更します。

var _this = this; 

あなたのコードサンプルでは、​​しかし、あなたもthisをキャッシュする必要はありません。

function test(div) { 
    jQuery.getJSON('/example.json', null, function(data) { 
     console.log(div); 
    }); 
}