发布-订阅模式(自定义事件)02——node中-绑定事件和触发事件

发布-订阅模式(自定义事件)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

发布-订阅模式(自定义事件)02——node中-绑定事件和触发事件_第1张图片

效果2

发布-订阅模式(自定义事件)02——node中-绑定事件和触发事件_第2张图片

你可能感兴趣的:(工具,js,event,javascript,node.js)