今日说说|js中如何在不影响既有事件监听的前提下新增监听器-创新互联
成都创新互联是专业的坡头网站建设公司,坡头接单;提供成都网站制作、做网站、外贸营销网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行坡头网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
分享名称:今日说说|js中如何在不影响既有事件监听的前提下新增监听器-创新互联
网页URL:http://myzitong.com/article/cdhdgs.html
一. 需求澄清
比如某个按钮已经绑定了2-3个对Window
对象的load
事件的监听,现在需要添加一个新的对click
事件的监听器,但在一定条件下才会同时触发原有的2-3个load
监听器,否则只触发新添加的这个事件。
假定新添加的监听函数为:
function additionalListener(){
console.log('should do something else');
}
二. ES5方法
ES5
中可以通过添加包装函数的方式来实现:
_windowonload = window.onload;
window.onload = function(){
additionalListener();
if (someCondition){
_windowonload();
}
}
三. ES6方法
ES6
中添加的代理对象Proxy
也可以用来实现这个需求,基本逻辑就是实现了对window.onload
的调用劫持:
var onloadProxy = new Proxy(window.onload,{
apply:function () {
additionalListener();
Reflect.apply(...arguments);
}
});
window.onload = onloadProxy;
四. AOP方法
AOP
,即面向切面编程,从元编程的角度来实现链式调用(建议一般编程人员不要在原生对象上添加新特性),实现的逻辑就是在函数的原型对象上添加after
方法,它接收一个函数作为参数,在函数被调用时先调用原函数,再调用after
方法传入的方法,最后返回原函数的执行结果:
Function.prototype.after = function (afterFn) {
return () => {
const result = this.apply(this, arguments);
afterFn.apply(this,arguments);
return result;
}
}
window.onload = window.onload.after(additionalListener);
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享名称:今日说说|js中如何在不影响既有事件监听的前提下新增监听器-创新互联
网页URL:http://myzitong.com/article/cdhdgs.html