一尘不染

“这个”不是指我想要的

ajax

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

阅读 192

收藏
2020-07-26

共1个答案

一尘不染

您可以定义一个变量存储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));
}
2020-07-26