// 很简单的自定义事件 function EventEmitter() { const events = {}; const eventEmitter = {}; eventEmitter.on = (key, action) => { if (events[key]) { events[key].push(action); } else { events[key] = [action]; } } eventEmitter.off = (key) => { delete events[key]; } eventEmitter.trigger = (key, params) => { if (events[key]) { events[key].forEach(func => { func(params); }) } if (events['*'] && key !== '*') { events['*'].forEach(f => { f(params); }) } } return eventEmitter; } var emitter = EventEmitter(); emitter.on('foo', function (e) { console.log('listening foo event 1', e); }); emitter.on('foo', function (e) { console.log('listening foo event 2', e); }); emitter.on('bar', function (e) { console.log('listening bar event', e); }); // 监听全部事件 emitter.on('*', function (e) { console.log('listening all events'); }); emitter.trigger('foo', { name: 'John' }); emitter.trigger('bar', { name: 'Sun' }); emitter.trigger('*', { name: 'Sun' }); emitter.off('foo');
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 981909093@qq.com

文章标题:

文章字数:129

本文作者:泽鹿

发布时间:2019-07-29, 11:54:51

最后更新:2019-07-30, 17:02:03

原始链接:http://panyifei.github.io/2019/07/29/前端面试/代码/基础/自定义事件/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏