eventEmitter.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. class EventEmitter {
  2. constructor() {
  3. this.__z_e_listeners = {}
  4. }
  5. on (evt, handler, context) {
  6. var handlers = this.__z_e_listeners[evt]
  7. if (handlers === undefined) {
  8. handlers = []
  9. this.__z_e_listeners[evt] = handlers
  10. }
  11. var item = {
  12. handler: handler,
  13. context: context,
  14. }
  15. handlers.push(item)
  16. return item
  17. }
  18. off (evt, handler, context) {
  19. var handlers = this.__z_e_listeners[evt]
  20. if (handlers !== undefined) {
  21. var size = handlers.length
  22. for (var i = 0; i < size; i++) {
  23. var item = handlers[i]
  24. if (item.handler === handler && item.context === context) {
  25. handlers.splice(i, 1)
  26. return
  27. }
  28. }
  29. }
  30. }
  31. emit (type, event) {
  32. var hanlders = this.__z_e_listeners[type]
  33. if (hanlders !== undefined) {
  34. var size = hanlders.length
  35. for (var i = 0; i < size; i++) {
  36. var ef = hanlders[i]
  37. var handler = ef.handler
  38. var context = ef.context
  39. handler.apply(context, [event])
  40. }
  41. }
  42. }
  43. }
  44. module.exports = new EventEmitter()