2

私はjavascriptとjQueryを試し始めています。指定した div に json ファイルをロードするクラスを作成しようとしましたが、理解できない動作に遭遇しました。

注: このコードが 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 番目の行を呼び出す前に最初の行を終了できるようにすると、期待される出力が表示されます。よくわかりません!

4

3 に答える 3

5

あなた _thisはグローバル変数ですvar。その前に追加してください。

実例: http: //jsfiddle.net/SQRwn/

ちなみに、次のようなコードであれば問題なく動作しますが、ここにあるのはおそらく使用するコードではありません...

function test(div) {
    jQuery.getJSON('/example.json', null, function(data) {
        console.log(div);
    });
}
于 2012-05-02T17:18:16.080 に答える
2

変数の前に含めない場合、varそれはグローバル変数になります。

_this = this;

shoudl be

var _this = this;
于 2012-05-02T17:18:27.140 に答える
1

これは、変数を適切に宣言しなかったため_thisであり、グローバルです。行を次のように変更します。

var _this = this;

ただし、コード サンプルでは、​​キャッシュする必要さえありませんthis

function test(div) {
    jQuery.getJSON('/example.json', null, function(data) {
        console.log(div);
    });
}
于 2012-05-02T17:18:45.487 に答える