// 很简单的自定义事件
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
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 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" 转载请保留原文链接及作者。