惰性模式
检测浏览器的监听方法
每次设置监听前,检测浏览器的对应监听方法
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;
};
}
};
以上代码为函数重写,当前浏览器运行后,第一次调用确定对应的监听方法,之后调用就直接执行。