Guest User

Untitled

a guest
Mar 21st, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.62 KB | None | 0 0
  1. class Event {
  2. constructor() {
  3. this.subscribers = new Map([
  4. ['default', []]
  5. ]);
  6. }
  7.  
  8. emit(type, ...args) {
  9. if (!this.subscribers.has(type)) {
  10. console.log(`${type} is not exist`);
  11. } else {
  12. for (let fn of this.subscribers.get(type)) {
  13. fn.apply(null, args);
  14. }
  15. }
  16. }
  17.  
  18. addEventListener(type = 'default', fn) {
  19. let sub = this.subscribers;
  20.  
  21. if (!sub) {
  22. sub = new Map();
  23. }
  24.  
  25. if (!sub.has(type)) {
  26. sub.set(type, [fn]);
  27. } else {
  28. sub.get(type).push(fn);
  29. }
  30. }
  31.  
  32. removeEventListener(type) {
  33. let sub = this.subscribers;
  34.  
  35. if (!sub.has(type)) {
  36. console.log(`${type} is not exist`);
  37. } else {
  38. sub.delete(type);
  39. console.log('delete success');
  40. }
  41. }
  42.  
  43. remove(type) {
  44. this.removeEventListener(type);
  45. }
  46.  
  47. on(type, fn) {
  48. this.addEventListener(type, fn);
  49. }
  50.  
  51. once(type, fn) {
  52. let a = true;
  53. function tmp(...args) {
  54. if (a) {
  55. a = false;
  56. fn.apply(null, args);
  57. }
  58. }
  59. this.addEventListener(type, tmp);
  60. }
  61. }
  62.  
  63. const newEvent = new Event();
  64.  
  65. newEvent.addEventListener('test', (...args) => { console.log(args) });
  66. newEvent.on('test', (...args) => { console.log(args) });
  67. newEvent.once('test', (...args) => { console.log(args, 'once') });
  68.  
  69. newEvent.emit('test', 'test1', 'test2');
  70. newEvent.emit('test', 'test1', 'test2');
  71.  
  72. newEvent.remove('test');
  73.  
  74. newEvent.emit('test', 'test1', 'test2');
Add Comment
Please, Sign In to add comment