我想扩展现有的XMLHttpRequest对象,以便它可以与所有浏览器一起使用。现在我已经对JS继承和其他方面有所了解,但是在开始之前,我希望看到它的一个很好的例子。
HTML5具有上载和进度事件的东西,我想在继承的新对象中实现,即使不通过向客户端引入JS错误不支持该功能,该对象也可以运行。所以我想实现这样的目标。
Class XMLHttpRequest{} Class UploadXMLHttpRequest: XMLHttpRequest{}
可以将其他方法附加到UploadXMLHttpRequest类,如下所示。
UploadXMLHttpRequest.prototype.uploadFile = function(file){ }
考虑到YUI,JQuery和其他在市场上都很好,没有人真的想要这样做,这使我很难找到合适的资源。
不要这样 XMLHttpRequest是主机对象,您不应尝试对其进行扩展。引用Kangax:
XMLHttpRequest
DOM扩展的下一个问题是 DOM对象是宿主对象 ,而宿主对象是最糟糕的一堆。根据规范(ECMA-262第3版),允许宿主对象执行操作,甚至没有其他对象可以梦想。引用相关部分[8.6.2]: 宿主对象可能以任何与实现相关的行为来实现这些内部方法,或者可能是宿主对象仅实现了某些内部方法,而没有实现其他方法。
DOM扩展的下一个问题是 DOM对象是宿主对象 ,而宿主对象是最糟糕的一堆。根据规范(ECMA-262第3版),允许宿主对象执行操作,甚至没有其他对象可以梦想。引用相关部分[8.6.2]:
宿主对象可能以任何与实现相关的行为来实现这些内部方法,或者可能是宿主对象仅实现了某些内部方法,而没有实现其他方法。
这也意味着宿主对象可能不允许使用扩展prototype。
prototype
但是,正如Kangax所建议的那样,您可以在周围创建包装器,XMLHttpRequest并随心所欲地对其进行处理。