覆盖XMLHttpRequest用自己的版本。 我不建议这样做,但有时如果您需要直接与使用XMLHttpRequest的代码集成,您可能会觉得您需要这样做。例如: (function() {
var realXMLHttpRequest = XMLHttpRequest;
XMLHttpRequest = function fakeXMLHttpRequest() {
realXMLHttpRequest.apply(this, arguments);
this.timeout = 2000;
this.addEventListener("timeout", function(e) {
// ...
});
};
XMLHttpRequest.prototype = realXMLHttpRequest.prototype;
})();
同样,我不推荐它,但它是可能的。
你在下面说过,上面的那个不适合你。如果不这样做,那是因为你使用的XMLHttpRequest实现让生活变得困难。此变通办法将工作: (function() {
var realXMLHttpRequest = XMLHttpRequest;
XMLHttpRequest = function fakeXMLHttpRequest(arg) {
var xhr;
if (typeof arg !== "undefined") {
// Some implementations allow for a non-standard argument, support them
xhr = new realXMLHttpRequest(arg);
} else {
// Normal case
xhr = new realXMLHttpRequest();
}
xhr.timeout = 2000;
xhr.addEventListener("timeout", function(e) {
// ...
});
return xhr;
};
XMLHttpRequest.prototype = realXMLHttpRequest.prototype;
})();
即使你new XMLHttpRequest调用它,因为new操作者的工作方式是,它创建对象并调用该对象的this功能,再new结果这一工程是那个对象,除非函数返回一个不同的非对象,如上面那样。
我提到我不推荐这个? ;-)