惰性模式

本文共--字 阅读约--分钟 | 浏览: -- 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就是执行被“确定”过的了。