Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.62 KB | None | 0 0
  1. const Emit = () => {
  2. let listeners = {}
  3.  
  4. const on = (eventName, listenerCb) => {
  5. if(listeners.hasOwnProperty(eventName)) {
  6. console.error('Already exist')
  7. return
  8. }
  9.  
  10. if(typeof eventName !== 'string') {
  11. console.error('Event name must be a string!')
  12. return
  13. }
  14.  
  15. if(typeof listenerCb !== 'function') {
  16. console.error('Callback must be a function!')
  17. return
  18. }
  19.  
  20. listeners[eventName] = listenerCb
  21. }
  22.  
  23. const off = (eventName) => {
  24. if(listeners.hasOwnProperty(eventName))
  25. delete listeners[eventName]
  26. }
  27.  
  28. const emit = (eventName) => {
  29. if(!listeners.hasOwnProperty(eventName)) {
  30. console.log(`${eventName} is not registered!`)
  31. return
  32. }
  33.  
  34. listeners[eventName]()
  35. }
  36.  
  37. const getListener = (eventName) => {
  38. if(listeners.hasOwnProperty(eventName)) {
  39. return listeners[eventName]
  40. } else { return false }
  41. }
  42.  
  43. return {
  44. on, off, emit, getListener
  45. }
  46.  
  47. }
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54. const myEmitter = Emit()
  55.  
  56. myEmitter.on('click', () => { console.log('======== im fired ========') })
  57. myEmitter.on('scroll', () => { console.log('scrolled') })
  58.  
  59. let myInterval = setInterval(() => {
  60. if(myEmitter.getListener('scroll')) {
  61. myEmitter.emit('scroll')
  62. } else {
  63. console.log('scroll STOP')
  64. clearInterval(myInterval)
  65. }
  66. }, 200)
  67.  
  68. setTimeout(() => {
  69. myEmitter.emit('click')
  70. myEmitter.off('click')
  71. }, 2000)
  72.  
  73. setTimeout(() => {
  74. myEmitter.emit('click')
  75. myEmitter.off('scroll')
  76. }, 4000)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement