我在用户脚本中定义以下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();
}
});
};