本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2021-12-15
惰性模式(Layer):减少每次代码执行时的重复性的分支判断,通过对对象重定义来屏蔽原对象中的分支判断。
// 加载即执行
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 (document.addEventListener) {
A.on = function(dom, type, fn) {
dom.addEventListener(type, fn, false);
}
} else if (document.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)
};
在第一次执行完成之后,A.on
就被重新定义了,后面再次调用A.on
就是执行被“确定”过的了。