Javascript “这”并不是指我想要什么

Javascript “这”并不是指我想要什么,javascript,ajax,callback,this,Javascript,Ajax,Callback,This,在我的一个类中,一个方法执行AJAX请求。在请求的回调函数中,我需要调用对象的另一个方法,使用这个方法。但这并不是指我在这个上下文中的对象,所以我不知道怎么做。。。这是唯一可能的吗 澄清,请考虑以下代码: function MyClass(arg) { this.foo = arg; } MyClass.prototype = { myMethod: function() { console.log("I am myMethod"); },

在我的一个类中,一个方法执行AJAX请求。在请求的回调函数中,我需要调用对象的另一个方法,使用这个方法。但这并不是指我在这个上下文中的对象,所以我不知道怎么做。。。这是唯一可能的吗

澄清,请考虑以下代码:

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();

您可以定义一个变量来将其存储在闭包中:

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

或者,如果您只在回调中调用myMethod,那么:

myGet: function (){
    $.get("http://example.iana.org/", $.proxy(this.myMethod, this));
}
在现代浏览器中,您也可以使用。当我不需要与IE8兼容时,我需要

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

您可以定义一个变量来将其存储在闭包中:

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

或者,如果您只在回调中调用myMethod,那么:

myGet: function (){
    $.get("http://example.iana.org/", $.proxy(this.myMethod, this));
}
在现代浏览器中,您也可以使用。当我不需要与IE8兼容时,我需要

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

+1美元。代理是cooler@emmasculateur就我个人而言,我对附加变量没有问题,特别是当您给它一个不太通用的名称时,但是$.proxy可能会使意图更清楚。有时使用附加变量是不可能的。例如,如果您在编写异步代码时深入到回调的许多级别,那么您可能会丢失对此原始代码的引用。在这种情况下,$.proxy可以起到解救作用。@MattHarrison对此不太确定-只要您创建一个闭包来存储当前的this引用,它应该可以正常工作,因为这基本上就是$.proxy在内部所做的。@MattHarrison更好的是相对的-bind和$.proxy是较短的语法,在语法上最合适。我的意思是,在使用这些函数的地方,您还可以围绕它包装另一个函数,存储this引用,然后您可以使用它调用/应用内部函数cooler@emmasculateur就我个人而言,我对附加变量没有问题,特别是当你给它一个不太通用的名称时,但是$.proxy可能会使意图更清楚。有时使用附加变量是不可能的。例如,如果您在编写异步代码时深入到回调的许多级别,那么您可能会丢失对此原始代码的引用。在这种情况下,$.proxy可以起到解救作用。@MattHarrison对此不太确定-只要您创建一个闭包来存储当前的this引用,它应该可以正常工作,因为这基本上就是$.proxy在内部所做的。@MattHarrison更好的是相对的-bind和$.proxy是较短的语法,在语法上最合适。我的意思是,在使用这些函数的地方,您还可以围绕它包装另一个函数,存储this引用,然后您可以使用它调用/应用内部函数。