“这个”并不是指我想要的东西

时间:2013-06-10 09:00:09

标签: javascript ajax callback this

在我的一个类中,一个方法执行AJAX请求。在请求的回调函数中,我需要使用this调用我的对象的另一个方法。但是this在这种情况下并没有引用我的对象,所以我不知道该怎么做......它是否只有可能?

澄清一下,请考虑以下代码:

function MyClass(arg) { 
    this.foo = arg; 
} 

MyClass.prototype = { 
    myMethod: function() { 
        console.log("I am myMethod");
    },
    myGet: function (){
        $.get("http://example.iana.org/",function(data){
            this.myMethod(); // does not work, because 'this' does not refer to my object
        });
    }
} 

var obj = new MyClass("Javascript is complicated"); 

obj.myGet();

1 个答案:

答案 0 :(得分:7)

您可以定义一个变量以在闭包中存储this

myGet: function (){
    var _this = this;
    $.get("http://example.iana.org/",function(data){
        _this.myMethod();
    });
}

或使用$.proxy

myGet: function (){
    $.get("http://example.iana.org/", $.proxy(function(data){
        this.myMethod();
    }, this));
}

或者,如果您只是在回调中调用myMethod

myGet: function (){
    $.get("http://example.iana.org/", $.proxy(this.myMethod, this));
}

在现代浏览器中,您还可以使用bind。当我不必与IE8兼容时,我

myGet: function (){
    $.get("http://example.iana.org/", this.myMethod.bind(this));
}