如何在内部类中找到正确的“this”对象?

时间:2014-09-03 11:12:38

标签: javascript this inner-classes

我正在编写一段类似的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

在这种情况下进行的标准方法是什么?

3 个答案:

答案 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并调用它。

希望有所帮助!!或者至少清除混乱.. :)