我正在编写一段类似的JavaScript:
MyClassA.prototype.method1 = function(){
//here, "this" refers to my instance of MyClassA
$.ajax({
url : "http://foo.com/foo",
success: function(data) {
//OMG! "this" now refers to another object
}
}
});
我需要访问this
函数中MyClassA
的{{1}}元素。在Java中,可以使用success
来引用内部类中的正确MyClassA.this
实例。在JavaScript中有没有类似的方法呢?
时
this
在这种情况下进行的标准方法是什么?
答案 0 :(得分:4)
常见的模式是将this
设置为变量,是的。但是,您所描述的内容会创建一个隐含的全局变量。要阻止它,请使用var
关键字:
var that = this;
以后
that.method2();
另一个解决方案是关闭。
MyClassA.prototype.method1 = function(){
(function(that) {
$.ajax({
url : "http://foo.com/foo",
success: function(data) {
that.method2();
...
}
});
})(this);
});
答案 1 :(得分:0)
我宁愿做
MyClassA.prototype.method1 = function(){
return $.ajax({
url : "http://foo.com/foo"
}
});
MyClassA.prototype.method2 = function(){
this.method1().done(function(data) {
//do method2 code
})
});
答案 2 :(得分:0)
MyClassA.prototype.method1 = function(){
myClassAThis=this; //1
$.ajax({
url : "http://foo.com/foo",
success: function(data) {
myClassAThis.method2(); //2
...
}
}
});
对象“this”在代码中的任何位置引用实际取决于您调用函数的方式。
在这种情况下, 1.作为通常的功能。示例: - functionName() 2.或者作为方法调用。示例: - new someOuterFunction()。someInnerFunction()
(注意:还有其他两种类型的调用)
在第一种情况下,隐式传递给函数作用域的this参数是全局对象上下文,在浏览器的情况下是窗口对象。
在第二种情况下,this参数实际上是指调用函数的实例,在这种情况下它将是someOuterFunction实例。
牢记这两点, 如果你看一下上面的代码// 1,那么“this”指的是取决于你如何调用method1。如果您碰巧将其作为普通函数调用,那么这将引用全局对象,因此它将在全局上下文中查找method2而不是MyClassA函数。
当你碰巧通过引用MyClassA的实例来调用method1作为方法调用时,“this”实际上指向该实例。然后,它将在MyClassA实例(或函数)中搜索Method2并调用它。
希望有所帮助!!或者至少清除混乱.. :)