//惰性模式:减少每次代码执行时重复行的分支判断,通过对对象重定义来屏蔽源对象中的分支判断
//单体模式定义命名空间
var A={};
A.on=function(ele,type,fn){
if(ele.addEventListener){
ele.addEventListener(type,fn,false);
}else if(ele.attachEvent){
ele.attachEvent('on'+type,fn);
}else{
ele['on'+type]=fn;
}
};//每次执行都要进行一次功能检测
//加载即执行
A.on=(function(){
if(document.addEventListener){
return function(dom,type,fn){
dom.addEventListener(type,fn,false);
};
}else if(document.attachEvent){
return function(dom,type,fn){
dom.attachEvent('on'+type,fn);
};
}else{
return function(dom,type,fn){
dom['on+type']=fn;
};
}
})();
//惰性执行
A.on=function(dom,type,fn){
if(dom.addEventListener){
A.on=function(dom,type,fn){
dom.addEventListener(type,fn,false);
};
}else if(dom.attachEvent){
A.on=function(dom,type,fn){
dom.attachEvent('on'+type,fn);
};
}else{
A.on=function(dom,type,fn){
dom['on'+type]=fn;
};
}
A.on(dom,type,fn);
};
//创建XHR对象
function createXHR(){
//标准浏览器
if(typeof XMLHttpRequest != 'undefined'){
return new XMLHttpRequest();
}else if(typeof ActiveXObject != 'undefined'){
//IE
if(typeof arguments.callee.activeXString != 'string'){//给该函数增加一个activeXString属性并做判断
var versions=['MSXML2.XMLHTTP.6.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP'],
i=0,
len=versions.length;
for(;i<len;i++){
try{
new ActiveXObject(versions[i]);
arguments.callee.activeXString=versions[i];
break;
}catch(ex){}
}
}
return new ActiveXObject(arguments.callee.activeXString);
}else{
throw new Error('您的浏览器不支持Ajax');
}
}
//改-第一种方案 加载时损失性能,但是第一次调用时不损失性能
var createXHR=(function(){
if(typeof XMLHttpRequest != 'undefined'){
return function(){
return new XMLHttpRequest();
};
}else if(typeof ActiveXObject){
return function(){
//省略上面函数的部分代码
return new ActiveXObject(arguments.callee.activeXString);
};
}else{
return function(){
throw new Error('...');
};
}
})();
//改-第二种方案 加载时不损失性能,但是第一次调用时损失性能
function createXHR(){
if(typeof XMLHttpRequest != 'undefined'){
createXHR=function(){
return new XMLHttpRequest();
};
}else if(typeof ActiveXObject != 'undefined'){
createXHR=function(){
//省略部分...
return new ActiveXObject(arguments.callee.activeXString);
};
}else{
createXHR=function(){
throw new Error('...');
};
}
}
机器学习-惰性模式
猜你喜欢
转载自blog.csdn.net/roamingcode/article/details/81671912
今日推荐
周排行