正在使用object.create()创建XMLHttpRequest对象
Creating XMLHttpRequest object with Object.create()
我来自基于类的OOP背景(C++/Java/C#),正在学习面向对象的JavaScript。我经常读到关于在处理JS对象时使用Object.create(...)
而不是new ...
的建议。
所以我尝试用这种方式创建AJAX调用:
var req = Object.create(XMLHttpRequest);
req.open(...); // TypeError: req.open is not a function
open
不应该在req
的原型链中吗?
我还尝试将XMLHttpRequest
构造函数应用于我的对象:
var req = Object.create(XMLHttpRequest);
XMLHttpRequest.apply(req, null); // Constructor XMLHttpRequest requires 'new'
就在我以为JS的OO方式已经解决了问题的时候,这让我又回到了:)
非常感谢那些帮助我了解这里发生了什么的人。
XMLHttpRequest
被设计为在作为构造函数调用时返回请求对象:var req = new XMLHttpRequest()
。Object.create(proto)
创建了一个以原型为第一个参数的新对象
这两种方法做不同的事情:对象创建和初始化(第一种情况)和简单地创建一个带有原型的新对象(第二种情况)。
当然,你可以尝试用这种方式完成同样的事情(不推荐):
var obj = Object.create(XMLHttpRequest.prototype);
XMLHttpRequest.call(obj); // initialize the request
几乎相当于:
var obj = new XMLHttpRequest();
但是你收到一个错误:
未捕获的类型错误:无法构造"XMLHttpRequest":请使用"新"运营商
因此,正确的解决方案是使用new XMLHttpRequest()
看看Fetch API,它接近于您试图实现的目标。但它在浏览器中的支持有限。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 为effect Composer创建GodRays效果过程
- 从javascript创建一个列表
- onkeyup无法动态创建多个文本区域
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何访问声音管理器2创建的声音对象
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 使用Facebook live API创建实时视频对象时的隐私设置
- 在动态创建的元素上获取对特定选择器的引用
- 如何创建带有插槽的vue js组件预加载程序
- 如何在创建键时引用来自同一对象的键
- 如何创建JSON数组
- 从html创建一个指令,该指令按类名应用函数
- 使用Javascript创建测验页面
- 更改使用Chart.js创建的图表中的轴线颜色
- JavaScript名称空间和对象创建
- JQuery对动态创建的对象进行选择
- 创建带有和不带有JavaScript的Bootstrap下拉菜单
- 使用jQuery从原始页面内容创建iframe