发布-订阅模式(自定义事件)02——node中-绑定事件和触发事件
var obj = {};
// 绑定事件
obj.bindEvent = function(eventName, eventFn) {
this[eventName] = this[eventName] || [];
// obj.hello = []
// obj.nihao = []
this[eventName].push(eventFn);
// obj.hello = [function() { console.log('hello1'); }, function() { console.log('hello2'); }]
// obj.hihao = [function() { console.log('nihao1'); }]
}
// 触发事件
obj.fireEvent = function(eventName) {
// 触发eventName事件绑定的函数
let fns = this[eventName];
fns.forEach(fn=>{
fn();
});
}
// 使用obj绑定事件
obj.bindEvent('hello', function() { console.log('hello1'); })
obj.bindEvent('hello', function() { console.log('hello2'); })
obj.bindEvent('nihao', function() { console.log('nihao1'); })
// 使用obj触发事件
obj.fireEvent('nihao');
// 自己实现发布订阅模式
let obj = {}
// 事件绑定
obj.bindEvent = function (eventName, eventCallback) {
this.listener = this.listener || {}
this.listener[eventName] = this.listener[eventName] || []
this.listener[eventName].push(eventCallback)
}
// 事件触发
obj.fireEvent = function (eventName) {
let eventCallbacks = this.listener[eventName]
eventCallbacks.forEach(callback => {
callback()
})
}
obj.bindEvent('hello', () => {console.log('hello')})
obj.bindEvent('hello', () => {console.log('nihao')})
//obj.fireEvent('hello')
obj.bindEvent('msg', () => {console.log('tom')})
obj.fireEvent('msg')
效果1
效果2