当前位置: 首页 > 面试题库 >

“这个”不是指我想要的

呼延俊良
2023-03-14
问题内容

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

问题答案:

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


 类似资料:
  • 我有一个项目,其中我创建了一个BankAccount超级类和一个SavingsAccount子类。一切都很好,但我在返回我特别想要的字符串时遇到了麻烦。 示例:(裁剪) 驱动程序类将对BankAccount使用toString方法,并打印以下内容: (这对于这个超类来说是完美的) 但是,下面是SavingsAccount子类 调用SavingsAccount的toString方法时,它会打印: S

  • 我在react中编写了一个页面,它与我使用express编写的一个小API代码交互,我在单击它时创建了一个按钮,它删除了一条消息,但当我不单击时,该函数仍在执行。。。我的代码: }

  • 我的训练图像是由一些拼接图像的ELAs(Error Level Analysis)中提取的蓝色通道组成的,标签只是它们对应的地面真值掩码。 我已经构造了一个简单的编码器-解码器CNN下面给出做分割,并在细胞膜分割任务上测试了它。在那里它的表现很好,并且创建了接近地面的真实图像,所以我猜我创建的神经网络是足够的能力。 但是,它不能在CASIA1+CASIA1GroundTruth数据集上的拼接图像上

  • 如果我直接在构造函数中添加面板,它可以正常工作,但在控制器中则不行。当我在菜单上点击“Reservas”或“Contabilidad”选项之一时,我想更改显示的面板并查看其他内容。 这是我的观点 } 这是我的控制器 } panel对象只有一个jlabel,其中有一个hello要测试