2

我已经开始尝试使用 javascript 和 jQuery。我试图创建一个将 json 文件加载到指定 div 的类,但我遇到了我不理解的行为:

注意:我知道这段代码不会将任何内容加载到 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”。但是,如果我允许第一行在调用第二行之前完成,则会显示预期的输出。我很困惑!

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;

应该是

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 回答