为什么我的整个es6类导入而不是实例

时间:2017-07-14 22:52:21

标签: javascript node.js module ecmascript-6

我正在构建的chrome插件中有一个es6类“GetLink”。当使用chrome的“tabs”api调用时,该类将获得活动选项卡的第一个链接。这是代码:

export class GetLink {
    constructor(tabs) {
        this.ajaxGet(
            `${tabs[0].url}?debug`,
            data => this.getLink(data),
            error => {throw new Error(`AJAX GET failed because response was ${error}`)}
        );
    }

    ajaxGet(url, success, error) {
        if(!window.XMLHttpRequest) throw new Error(`This browser does not support XMLHttpRequest`);
        let request = new XMLHttpRequest();
        request.onreadystatechange = () => {
            if(request.readyState === 4) {
                if(request.status !== 200) {
                    console.log(request.status);
                    if(error && typeof error === "function") {
                        error(error);
                    }
                }
                if(success && typeof success === "function") {
                    success(request.responseText);
                }
            }
        };
        request.open("GET", url);
        request.send();
    }

    getLink(data) {
        let nodeList = document.createElement("html");
        nodeList.innerHTML = data;
        return nodeList.querySelector("a").href;
    }
}

chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, tabs => {
    console.log(new GetLink(tabs));
});

我希望,使用“new”关键字,我会得到GetLink实例的结果。相反,我得到了整个未经实例化的课程。

如果在构造函数中的“getAjax”成功处理程序调用中我记录“this.getLink(data)”而不是返回它,我通过调用新的GetLink(制表符)来获取日志。

这是因为getAjax是异步的吗?如果是这样,解决这个问题的好方法是什么? (我尝试在构造函数中返回this.getAjax,将实例分配给变量等)如果不是我做错了什么?

0 个答案:

没有答案