我在用户脚本中定义以下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)错误:



似乎this在错误的上下文中被评估。

有没有一种方法可以调用myCallback()myClassInstance方法而不必求助于使用全局变量?

最佳答案

将正确的this(在范围内)保存到变量中。然后您可以稍后引用它:

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

10-08 17:19