1

我有一个这样定义的对象:

function company(announcementID, callback){
    this.url = 'https://poit.bolagsverket.se/poit/PublikSokKungorelse.do?method=presenteraKungorelse&diarienummer_presentera='+announcementID;
    self = this
    GM_xmlhttpRequest({
        method: "GET",
        url: this.url,
        onload: function(data) {
            self.data = data;
            callback();
        }
    })
}

在回调中,我希望为该对象引用另一个名为“callbacktest”的方法,我正在尝试这样做吗?

    var mycompany = new company(announcementID, callbacktest);

如果我用匿名函数来做,我会写 mycompany.callbacktest() 但我如何从其变量中引用“mycompany”?

4

2 回答 2

2

在从构造函数返回到 的引用之前mycompany,您真的无法访问它作为参数。

因此,我会说您提到的“匿名函数”是实现此目的的好方法,因为它可以访问变量,该变量将具有引用:

var mycompany = new company(announcementID, function () {
    mycompany.callbacktest();
});

或者,也许将请求工作callback移至方法。

function company(announcementID){
    this.url = 'https://poit.bolagsverket.se/poit/PublikSokKungorelse.do?method=presenteraKungorelse&diarienummer_presentera='+announcementID;
}

company.prototype.request = function (callback) {
    var self = this;
    GM_xmlhttpRequest({
        method: "GET",
        url: this.url,
        onload: function(data) {
            self.data = data;
            callback();
            // or: callback.call(self);
        }
    })
};

company.prototype.callbacktest = function (...) { ... };

// ...

var mycompany = new company(announcementID);
mycompany.request(mycompany.callbacktest);

注意:您可能需要.bind()将方法传递给.request().

mycompany.request(mycompany.callbacktest.bind(mycompany));
于 2013-08-13T11:32:26.533 回答
1

如果您希望将构建的公司作为thisin 回调,您可以通过以下方式实现:

// instead of callback(); do:
callback.call(self);
于 2013-08-13T11:29:28.210 回答