emit.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // 实现简单的事件机制
  2. import { isObject } from '../../util/common';
  3. class EventEmit {
  4. constructor() {
  5. this.__events = {};
  6. }
  7. on(type, listener) {
  8. if (!type || !listener) {
  9. return;
  10. }
  11. var events = this.__events[type] || [];
  12. events.push(listener);
  13. this.__events[type] = events;
  14. }
  15. emit(type, e) {
  16. var _this = this;
  17. if (isObject(type)) {
  18. e = type;
  19. type = e && e.type;
  20. }
  21. if (!type) {
  22. return;
  23. }
  24. var events = this.__events[type];
  25. if (!events || !events.length) {
  26. return;
  27. }
  28. events.forEach(function (listener) {
  29. listener.call(_this, e);
  30. });
  31. }
  32. off(type, listener) {
  33. var __events = this.__events;
  34. var events = __events[type];
  35. if (!events || !events.length) {
  36. return;
  37. } // 如果没有指定方法,则删除所有项
  38. if (!listener) {
  39. delete __events[type];
  40. return;
  41. } // 删除指定的 listener
  42. for (var i = 0, len = events.length; i < len; i++) {
  43. if (events[i] === listener) {
  44. events.splice(i, 1);
  45. i--;
  46. }
  47. }
  48. }
  49. }
  50. export default EventEmit;