1

在我的一个类中,一个方法执行 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();
4

1 回答 1

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));
}
于 2013-06-10T09:01:19.287 回答