gpt4 book ai didi

javascript - 在哪里返回创建的 XHR 对象

转载 作者:行者123 更新时间:2023-12-01 02:55:29 26 4
gpt4 key购买 nike

在教科书上发现了以下函数。它应该创建可能的最新版本的 XHR 对象。

function createXHR(){
if (typeof arguments.callee.activeXString != "string"){
var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],
i, len;

for(i=0, len=versions.length; i<len; i++){
try {
new ActiveXObject(versions[i]);
arguments.callee.activeXString=versions[i];
break;
}catch(ex){
//skip
}
}

}
return new ActiveXObject(arguments.callee.activeXString);
}

我的问题是:为什么我们不能只返回 for 循环内的对象?像这样的事情:

function createXHR(){
if (typeof arguments.callee.activeXString != "string"){
var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],
i, len;

for(i=0, len=versions.length; i<len; i++){
try {
arguments.callee.activeXString=versions[i];
return new ActiveXObject(versions[i]);
}catch(ex){
arguments.callee.activeXString = undefined;
}
}

}
}

这两个似乎与我相当。

最佳答案

why can't we just return the object inside of the for-loop?

你当然可以。 (在第二个示例中, break; 是不必要的。)

但是,您需要允许对 createXHR 进行第二次、第三次等调用,而当前的第二个代码块不允许这样做。如果您已经拥有activeXString(例如else),则需要执行new ActiveXObject(arguments.callee .activeXString).

如果它们都不起作用,我还建议抛出错误。

<小时/>

请注意,这已经过时并且仅适用于 IE。创建 XHR 对象的正确方法是: new XMLHttpRequest(...) 只有当 XMLHttpRequest 不存在时,您才会寻求依靠这些过时的方法(例如,如果您需要支持 IE8 或 IE9-IE11 的“兼容模式”)。

另一个注意事项:在该代码中始终不需要使用 arguments.callee,并且它不再在严格模式下工作(并且您想要使用严格模式)。相反,只需使用createXHR:createXHR.activeXString = ...

例如:

function createXHR() {
if (typeof XMLHttpRequest !== "undefined") {
return new XMLHttpRequest;
}
// Obsolete-IE-only fallbacks
if (typeof createXHR.activeXString != "string") {
var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],
i, len;

for (i = 0, len = versions.length; i < len; i++) {
try {
createXHR.activeXString = versions[i];
return new ActiveXObject(versions[i]);
} catch (ex) {
createXHR.activeXString = undefined;
}
}

throw new Error("No XHR available");
} else {
return new ActiveXObject(createXHR.activeXString);
}
}

关于javascript - 在哪里返回创建的 XHR 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46728343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com