我正在阅读一本关于 DOM 脚本的书,当他们谈论 Ajax 时,书中出现了以下函数。
function getHTTPObject() {
if(typeof XMLHTTPRequest == "undefined")
XMLHTTPRequest = function() {
try { return new ActiveXObject("Msxml2.XMLHTTP.6.0");}
catch(e) {}
//several more fall through try/catch blocks attempting
//to create different XMLHTTP objects.
//If none succeed...
return false;
}
return new XMLHTTPRequest();
}
如果尝试在分配给 XMLHTTPRequest 的内部匿名函数中创建 ActiveXObject 时在 try/catch 块中使用了 new 关键字,为什么在 getHTTPObject() 的末尾返回 XMLHTTPRequest 的结果时再次使用 new 关键字?
似乎它正在返回一个新的新对象。
编辑
我大致了解代码的目的是什么,检查 XMLHTTPRequest 构造函数是否存在,如果不存在,则定义一个尝试生成 XMLHTTP ActiveXObjects 的构造函数。到目前为止,我和你在一起。
假设 XMLHTTPRequest 未定义。
XMLHTTPRequest 被分配了内部函数构造函数。
然后在 getHTTPRequest 的底部调用 XMLHTTPRequest。
在 XMLHTTPRequest 中,创建一个新的 ActiveXObject 并将其返回给调用者,在本例中为 getHTTPObject。现在 getHTTPObject 又将这个对象返回给它的调用者。但同样,为什么这条线:
return new XMLHTTPRequest()
如果新的(即对象实例化)已经出现在 XMLHTTPRequest() 的定义/范围内的那个 try 块的代码中,是否需要那个新的?为什么不简单:
return XMLHTTPRequest()
谢谢大家的回答。很有可能,甚至可能是我对 JS 构造函数语法的掌握不够强,这就是让我在这里绊倒的原因。