分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

今日说说| js中如何在不影响既有事件监听的前提下新增监听器

发布时间:2023-09-06 02:13责任编辑:赖小花关键词:js

一. 需求澄清

比如某个按钮已经绑定了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);

今日说说| js中如何在不影响既有事件监听的前提下新增监听器

原文地址:http://blog.51cto.com/13869008/2170109

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved