Skip to main content

惰性模式

检测浏览器的监听方法

每次设置监听前,检测浏览器的对应监听方法

function addEvent(dom, type, fn) {
if (dom.addEventListener) {
dom.addEventListener(type, fn, false);
} else if (dom.attachEvent) {
dom.attachEvent("on" + type, fn);
} else {
dom["on" + type] = fn;
}
}

以上代码,由于浏览器运行后就已经确定对应的监听方法,其实不需要每次都进行检测的。 以下是优化代码:

自执行代码

const AddEvent = (function (dom, type, fn) {
if (dom.addEventListener) {
dom.addEventListener(type, fn, false);
} else if (dom.attachEvent) {
dom.attachEvent("on" + type, fn);
} else {
dom["on" + type] = fn;
}
})();

以上代码为自执行代码,当前浏览器运行后,立即确定对应的监听方法。

函数重写

const AddEvent = function (dom, type, fn) {
if (dom.addEventListener) {
AddEvent = function (dom, type, fn) {
dom.addEventListener(type, fn, false);
};
} else if (dom.attachEvent) {
AddEvent = function (dom, type, fn) {
dom.attachEvent("on" + type, fn);
};
} else {
AddEvent = function (dom, type, fn) {
dom["on" + type] = fn;
};
}
};

以上代码为函数重写,当前浏览器运行后,第一次调用确定对应的监听方法,之后调用就直接执行。