javascript - 从回调中调用 javascript 对象方法

标签 javascript callback javascript-objects

我在用户脚本中定义了以下MyClass及其方法:

function MyClass() {
    this.myCallback = function() {
        alert("MyClass.myCallback()");
    };

    this.startRequest = function() {
        GM_xmlhttpRequest({
            'method': 'GET',
            'url': "http://www.google.com/",
            'onload': function (xhr) {
                myClassInstance.myCallback();
            }
        });
    };
}

var myClassInstance = new MyClass();
myClassInstance.startRequest();

此脚本有效,一旦 GM_xmlhttpRequest 完成,myCallback() 方法就会被调用。

但是,它仅在 onload 回调引用全局变量 myClassInstance 时才起作用。如果我将 onload 回调更新为:

'onload': function (xhr) {
    this.myCallback();
}

然后我收到(Chrome)错误:

Uncaught TypeError: Object [object DOMWindow] has no method 'myCallback'.

似乎this正在错误的上下文中进行评估。

有没有一种方法可以调用 myClassInstancemyCallback() 方法,而无需使用全局变量?

最佳答案

当正确的this在作用域内时,将其保存到变量中。然后您可以稍后引用:

 this.startRequest = function() {
     var myself = this;
     GM_xmlhttpRequest({
         'method': 'GET',
         'url': "http://www.google.com/",
         'onload': function (xhr) {
             myself.myCallback();
         }
     });
 };

关于javascript - 从回调中调用 javascript 对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6985288/

相关文章:

javascript json隐藏空行

php - 将 Paypal IPN 变量打印到屏幕

javascript - JS在嵌入中获取svg对象

javascript - 没有 ?jsoncallback=? 的 JSONP

javascript - 使用 underscore.js 和 knockout.js 按列创建和排序表格

ios - iOS中使用performSelector的回调函数

ios - 如何在 Swift 中正确触发/调用 "selector"?

javascript - 如何将 JavaScript 对象复制到新变量而不是通过引用?

Javascript 对象作为参数处理

javascript - React-native 组件不工作,它会循环并在 UI 上显示不断增加的值(value)