<body>
<h3>设计模式知识连载(42)---惰性模式:</h3>
<p>
减少每次代码执行时的重复性的分支判断,通过对对象重定义来屏蔽原对象中的分支判断
</p>
<hr>
<button id = 'btn'>点击</button>
<script type="text/javascript">
/**
* 案例一:,方式一:初始
*/
// // // 单体模式定义命名空间
// var A = {} ;
// // 添加绑定事件方法on
// A.on = function(dom, type, fn) {
// if(dom.addEventListener) {
// dom.addEventListener(type, fn, false) ;
// }else if(dom.attachEvent) {
// dom.attachEvent('on' + type, fn) ;
// }else {
// dom['on' + fn] = fn ;
// }
// }
// var btn = document.getElementById('btn') ;
// A.on(btn, 'click', function() {
// console.log('111') ;
// }) ;
/**
* 案例一:,方式二:进阶
*/
// // 单体模式定义命名空间
// var A = {} ;
// // 添加绑定事件方法on
// A.on = (function(dom, type, fn) {
// // 如果支持addEventListener方法
// if(document.addEventListener) {
// // 返回重新定义方法
// return function(dom, type, fn) {
// dom.addEventListener(type, fn, false) ;
// }
// // 如果支持attachEvent方法(IE)
// }else if(document.attachEvent) {
// // 返回重新定义方法
// return function(dom, type, fn) {
// dom.attachEvent('on' + type, fn) ;
// }
// // 定义on方法
// }else {
// // 返回重新定义方法
// return function() {
// dom['on' + fn] = fn ;
// }
// }
// })() ;
// console.log(A.on) ;
/**
* 案例一:,方式三:进阶
*/
// 单体模式定义命名空间
var A = {} ;
// 添加绑定事件方法on
A.on = function(dom, type, fn) {
// 如果支持addEventListener方法
if(dom.addEventListener) {
// 显示重新定义on方法
A.on = function(dom, type, fn) {
dom.addEventListener(type, fn, false) ;
}
// 如果支持attachEvent方法(IE)
}else if(dom.attachEvent) {
// 显示重新定义on方法
A.on = function(dom, type, fn) {
dom.attachEvent('on' + type, fn) ;
}
// 定义on方法
}else {
// 显示重新定义on方法
A.on = function(dom, type, fn) {
dom['on' + fn] = fn ;
}
}
// 执行重新定义on方法
A.on(dom, type, fn) ;
} ;
// 测试用例
var btn = document.getElementById('btn') ;
A.on(btn, 'click', function() {
console.log('111') ;
}) ;
/**
* 案例二:创建XHR对象,方式一:初始
*/
// 创建XHR对象
// function createXHR() {
// // 标准浏览器
// if(typeof XMLHttpRequest != 'undefined') {
// return new XMLHttpRequest() ;
// // IE浏览器
// }else if(typeof ActiveXObject != 'undefined') {
// if(typeof arguments.callee.activeXString != 'string') {
// var versions = ['MSXML2.XMLHttp.6.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp'] ;
// var i = 0 ;
// var len = versions.length ;
// // 遍历并设置版本
// for(; i < len; i++) {
// try {
// new ActiveXObject(versions[i]) ;
// arguments.callee.activeXString = versions[i] ;
// break ;
// }catch(e) {
// }
// }
// }
// return new ActiveXObject(arguments.callee.activeXString) ;
// // 对不支持的浏览器抛出错误提示
// }else {
// throw new Error('您的浏览器并不支持Ajax') ;
// }
// }
/**
* 案例二:创建XHR对象,方式二:进阶
* 加载时损失性能,但是第一次调用时不损失性能
*/
// 创建XHR对象
// var createXHR = (function () {
// // 标准浏览器
// if(typeof XMLHttpRequest != 'undefined') {
// return function() {
// return new XMLHttpRequest() ;
// }
// // IE浏览器
// }else if(typeof ActiveXObject != 'undefined') {
// return function() {
// if(typeof arguments.callee.activeXString != 'string') {
// var versions = ['MSXML2.XMLHttp.6.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp'] ;
// var i = 0 ;
// var len = versions.length ;
// // 遍历并设置版本
// for(; i < len; i++) {
// try {
// new ActiveXObject(versions[i]) ;
// arguments.callee.activeXString = versions[i] ;
// break ;
// }catch(e) {
// }
// }
// }
// return new ActiveXObject(arguments.callee.activeXString) ;
// }
// // 对不支持的浏览器抛出错误提示
// }else {
// return function() {
// throw new Error('您的浏览器并不支持Ajax') ;
// }
// }
// })() ;
/**
* 案例二:创建XHR对象,方式三:进阶
* 加载时不损失性能,但是第一次调用时损失性能
*/
function createXHR() {
// 标准浏览器
if(typeof XMLHttpRequest != 'undefined') {
createXHR = function() {
return new XMLHttpRequest() ;
}
// IE浏览器
}else if(typeof ActiveXObject != 'undefined') {
createXHR = function() {
if(typeof arguments.callee.activeXString != 'string') {
var versions = ['MSXML2.XMLHttp.6.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp'] ;
var i = 0 ;
var len = versions.length ;
// 遍历并设置版本
for(; i < len; i++) {
try {
new ActiveXObject(versions[i]) ;
arguments.callee.activeXString = versions[i] ;
break ;
}catch(e) {
}
}
}
return new ActiveXObject(arguments.callee.activeXString) ;
}
// 对不支持的浏览器抛出错误提示
}else {
createXHR() {
throw new Error('您的浏览器并不支持Ajax') ;
}
}
return createXHR() ;
}
</script>
</body>
设计模式知识连载(42)---惰性模式:
最新推荐文章于 2021-07-06 09:19:14 发布