当前位置: 首页 > 面试题库 >

如何在JavaScript中扩展XMLHttpRequest对象?

袁阿苏
2023-03-14
问题内容

我想扩展现有的XMLHttpRequest对象,以便它可以与所有浏览器一起使用。现在我已经对JS继承和其他方面有所了解,但是在开始之前,我希望看到它的一个很好的例子。

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

Class XMLHttpRequest{}
Class UploadXMLHttpRequest: XMLHttpRequest{}

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

UploadXMLHttpRequest.prototype.uploadFile = function(file){

}

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


问题答案:

不要这样
XMLHttpRequest是主机对象,您不应尝试对其进行扩展。引用Kangax:

DOM扩展的下一个问题是 DOM对象是宿主对象
,而宿主对象是最糟糕的一堆。根据规范(ECMA-262第3版),允许宿主对象执行操作,甚至没有其他对象可以梦想。引用相关部分[8.6.2]:


宿主对象可能以任何与实现相关的行为来实现这些内部方法,或者可能是宿主对象仅实现了某些内部方法,而没有实现其他方法。

这也意味着宿主对象可能不允许使用扩展prototype

但是,正如Kangax所建议的那样,您可以在周围创建包装器,XMLHttpRequest并随心所欲地对其进行处理。



 类似资料:
  • 问题内容: 我试图在不修改本机对象本身的情况下继承/扩展本机Date对象。 我已经试过了: 还有这个: 在这两种情况下都可以,但是当我调用任何本地方法(例如甚至)时,都会收到“ TypeError:这不是Date对象”。 有任何想法吗?还是我坚持扩展顶级Date对象? 问题答案: 查看date.js中的v8代码: 并且看起来DATE_VALUE是执行此操作的宏: 因此,似乎v8不会让您继承Date

  • 问题内容: 我正在编写FireFox-Extension,并希望从服务器加载数据。但是当我尝试使用以下方法初始化XMLHttpRequest时: 错误控制台显示: 我是否必须包含某些内容,或者为什么不能识别XMLTttpRequest? 问题答案: 附加SDK(您通过附加生成器间接使用)提供了一个实质上是包装的软件包,您应该使用它。据我了解,如果在执行请求时卸载/禁用了加载项,则不会直接访问您以防

  • 问题内容: 根据chrome扩展,如果设置了权限,则应允许使用XMLHttpRequest对象的API跨域调用: 扩展可以与源外的远程服务器通信,只要它首先请求跨域许可。 我正在密切关注本教程,但是下面的代码给了我一条错误消息: XMLHttpRequest无法加载http://www.google.com/search?hl=zh_CN&q=ajax。Access- Control-Allow-

  • 编组或取消编组对象 您可以将若干个对象合并到一个组中,把这些对象作为一个单元同时进行处理。这样,您就可以同时移动或变换若干个对象,且不会影响其属性或相对位置。例如,您可能想将徽标设计中的对象编成一组,以便将其作为一个单元进行移动和缩放。 编组对象被连续堆叠在图稿的同一图层上,位于组中最前端对象之后;因此,编组可能会更改对象的图层分布及其在给定图层上的堆叠顺序。如果您选择位于不同图层中的对象并将其编

  • 我在下棋。我想做一个抽象的piece类,然后可以通过pawn/knight/rook/等进行扩展。假设我的piece类是这样的: 我希望Pawn具有相同的sayName功能,但我希望它具有不同的movePiece功能,因为Pawn有自己独特的移动方式。我怎么做典当,使它扩展件,并覆盖件的移动件功能?

  • 遵循以下文档:http://guides.micronaut.io/micronaut-database-authentication-provider-groovy/guide/index.html,您可以为auth/auth创建一个DB/DAO。如果为UserFetcher、PasswordEncoder和AuthoritiesFetcher提供实现,那么最好使用默认的DelegatingAu