EventObject.ts 785 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. const events = {};
  2. export default class EventObject {
  3. hasEvent(event) {
  4. return event in events;
  5. }
  6. on(event, listener) {
  7. if (!this.hasEvent(event)) {
  8. events[event] = [];
  9. }
  10. events[event].push(listener);
  11. }
  12. off(event, listener = null) {
  13. if (!this.hasEvent(event)) {
  14. return;
  15. }
  16. if (listener === null) {
  17. return (events[event] = []);
  18. }
  19. events[event] = events[event].filter(
  20. (eventListener) => eventListener !== listener
  21. );
  22. }
  23. trigger(event, ...data) {
  24. if (this.hasEvent(event)) {
  25. let stopped = false;
  26. events[event].forEach((listener) => {
  27. if (stopped) {
  28. return;
  29. }
  30. if (listener(...data) === false) {
  31. stopped = true;
  32. }
  33. });
  34. }
  35. }
  36. }