在声明它时,在其变量中引用javascript对象

时间:2013-08-13 11:25:11

标签: javascript

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

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”?

2 个答案:

答案 0 :(得分: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);

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

mycompany.request(mycompany.callbacktest.bind(mycompany));

答案 1 :(得分:1)

如果您希望将构建的公司作为回调中的this,您可以通过以下方式执行此操作:

// instead of callback(); do:
callback.call(self);