如何在JavaScript中扩展XMLHttpRequest对象?

Ani*_*mde 2 javascript ajax javascript-events

我想扩展现有的XMLHttpRequest对象,以便它可以与所有浏览器一起使用.现在我已经陷入了JS继承和事情,但是在开始之前我希望看到它的好例子.

HTML5具有上传和进展事件的东西,我想在继承的新对象中实现,即使不向客户端引入JS错误也不支持该功能.所以我想实现这样的目标.

Class XMLHttpRequest{}
Class UploadXMLHttpRequest: XMLHttpRequest{}
Run Code Online (Sandbox Code Playgroud)

其他方法可以附加到UploadXMLHttpRequest类,如下所示.

UploadXMLHttpRequest.prototype.uploadFile = function(file){

}
Run Code Online (Sandbox Code Playgroud)

考虑到YUI,JQuery和其他人在市场上很好,没有人真的想要这样做,这让我很难找到好的资源.

Mar*_*pel 7

不要这样做.XMLHttpRequest是一个宿主对象,你不应该尝试扩展它.引用Kangax:

DOM扩展的下一个问题是DOM对象是宿主对象,而宿主对象是最糟糕的.根据规范(ECMA-262 3rd.ed),允许宿主对象做事,其他对象甚至无法做到.引用相关章节[8.6.2]:

宿主对象可以使用任何依赖于实现的行为来实现这些内部方法,或者可能是宿主对象仅实现一些内部方法而不实现其他方法.

这也意味着主机对象可以通过使用来禁止扩展prototype.

然而,正如Kangax也建议的那样,你可以创建一个包装器XMLHttpRequest并随心所欲地做任何事情.