在我的一个类中,一种方法执行AJAX请求。在请求的回调函数中,我需要使用调用对象的另一个方法this。但是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();
您可以定义一个变量存储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回调:
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)); }