无法构造'XMLHttpRequest':请使用'new'运算符,此DOM对象构造函数不能作为函数

时间:2016-11-24 21:14:25

标签: typescript constructor xmlhttprequest

export default class Promise extends XMLHttpRequest {
    constructor(url: string, type: string) {
        super();
        config.url = url;
        config.requestType = type;
    }
}

在这里,我创建了一个扩展类XMLHttpRequest的类承诺。 然后我尝试使用下面给出的方法访问这个类。

let prom = new Promise('api/200', 'get');

进入超级电话时出现以下错误

  

无法构造'XMLHttpRequest':请使用'new'运算符,此DOM对象构造函数不能作为函数调用

2 个答案:

答案 0 :(得分:4)

这可能是因为XMLHttpRequest是托管对象,有时在扩展时行为不端。

幸运的是,如果你用es6类扩展它会发生变化 编译时:

class RequestPromise extends XMLHttpRequest {
    constructor() {
        super();
    }
}

至于es5,你得到:

var __extends = (this && this.__extends) || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var RequestPromise = (function (_super) {
    __extends(RequestPromise, _super);
    function RequestPromise() {
        _super.call(this);
    }
    return RequestPromise;
}(XMLHttpRequest));

但是当用目标es6编译它时,它将保持类的原样:

class RequestPromise extends XMLHttpRequest {
    constructor() {
        super();
    }
}

如果你尝试它应该可以正常工作

答案 1 :(得分:-1)

XMLHttpRequest可以非常轻松地发送HTTP请求。您只需创建对象的实例,打开URL并发送请求。

var oReq = new XMLHttpRequest();