javascript - 如何在 IE6 中向对象添加属性?

标签 javascript ajax internet-explorer prototype

我在使用 AJAX 时遇到了一个特别棘手的问题,它在 IE7 和 Firefox 中工作正常,但在 IE6 中却不行。

我有一个非常简单的自制 AJAX 框架,它要求我通过添加几个属性来扩展 XMLHttpRequest 对象(或者在 IE 中为 XMLHttpRequest ActiveXObject)。相关部分代码如下:

//the following is the constructor for our ajax request object - which extends the standard object. It is used in the method below it   
function FD_XMLHttpRequest() {     
  var xmlHttpReq = false;
  if (window.XMLHttpRequest) { // Mozilla/Safari
    xmlHttpReq = new XMLHttpRequest();
  } else if (window.ActiveXObject) { // IE
    xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
  }
  //we now have the request object - extend it with things we might need to store with it
  xmlHttpReq.onReturnFunc = null; //******ERROR IN IE6******
  xmlHttpReq.targetDivId = null;  //******ERROR IN IE6******
  return xmlHttpReq;  
} 
//To use:
myXHReq = new FD_XMLHttpRequest();
myXHReq.onReturnFunc = someFunction; 
myXHReq.targetDivId = "myDiv";  

问题似乎是 FF 和 IE7 允许以这种方式扩展对象,但 IE6 不允许(它提示“对象不支持此属性或方法”)。我尝试过使用“prototype”属性和各种“真实”继承方法,但我不太明白 IE6 到底发生了什么

最佳答案

在 IE7 上,您将获得一个“原生 JavaScript”XMLHttpRequest 对象。与所有 JavaScript 对象一样,您可以毫无问题地向它们添加任意属性 — 尽管这并不总是一个好主意,因为如果 future 的浏览器添加了自己的真正的“onReturnFunc”成员,您就会混淆它。

在 IE6 或 IE7 上,当禁用“ native XMLHttpRequest”选项时,您将转而使用原始的 ActiveX XMLHttpRequest。但是,ActiveX 对象的行为与 JavaScript 对象有很大不同,其中区别之一是您不能添加任意属性。

一般来说,您应该有自己的包装类来保存您需要的任何额外数据,并保存对“真实”XMLHttpRequest 对象的引用。

关于javascript - 如何在 IE6 中向对象添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/594428/

相关文章:

javascript - 使用 JavaScript 以递归方式从对象中删除属性和值的最快方法是什么?

javascript - 如何将 jquery 应用于由 ajax 调用填充的标记

flash - 为什么我上传的文件是空的?

internet-explorer - ActiveX 自定义事件无法在 IE11 上运行

javascript - 形成多行插入的数组格式nodejs-mysql

JavaScript 严重错误...将数组传递给 Charts.js 时出现语法错误 (MVC 5)

javascript - 覆盖 CSS 类

jquery - 过滤 AJAX get 请求上的 XML 结果

php - 使用 php mysql Ajax 使用弹出表单将数据插入数据库

html - 我的 CSS 未在 Internet Explorer 11 和 Firefox 中加载!仅适用于 Chrome