function createDocument(){
if(typeof arguments.callee.activeXString!="string"){
var versions=["MSXML2.DOMDocument.6.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument"],i,len;
for(var i=0;i<versions.length;i++){
try{
new ActiveXObject(versions[i]);
arguments.callee.activeXString=versions[i];
break;
}catch(error){
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
}
这是一个创建ActiveXObject对象的方法,它可以兼容IE的多个版本。开始对于这个方法中的arguments.callee.activeXString,非常不理解。为什么不能使用activeXString,或者是this.activeXString呢。通过查阅资料发现,arguments.callee.activeXString是创建当前函数的对象名为activeXString。js函数即是对象,相当于创建了一个对象属性。
1.使用arguments.callee.activeXString
执行两次函数,只会检查一次IE版本,第二次可以直接获取arguments.callee.activeXString的值。
2.使用this.activeXString或者activeXString。
执行两次函数,会检查两次IE版本,相当于存入activeXString的值,在每次运行后销毁。