【问题标题】:Failed to construct 'XMLHttpRequest': Please use the 'new' operator, this DOM object constructor cannot be called as a function构造“XMLHttpRequest”失败:请使用“new”运算符,此 DOM 对象构造函数不能作为函数调用
【发布时间】:2017-04-09 05:45:20
【问题描述】:
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对象构造器不能作为函数调用

【问题讨论】:

标签: typescript constructor xmlhttprequest


【解决方案1】:

这可能是因为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();
    }
}

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

【讨论】:

  • 是的,我也发现它在 es6 格式下运行良好,但对我来说,我的应用程序也针对 IE,所以我猜 es6 不会对此有任何好处
【解决方案2】:

XMLHttpRequest 使发送 HTTP 请求变得非常容易。您只需创建对象的一个​​实例,打开一个 URL,然后发送请求。

var oReq = new XMLHttpRequest();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-24
    • 2023-03-29
    • 1970-01-01
    • 2016-01-31
    • 2017-07-29
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    相关资源
    最近更新 更多