SingleEmitter.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. var Class = require('./Class');
  2. var clone = require('./clone');
  3. var each = require('./each');
  4. var toArr = require('./toArr');
  5. exports = Class(
  6. {
  7. initialize: function SingleEmitter() {
  8. this._listeners = [];
  9. },
  10. addListener: function(listener) {
  11. this._listeners.push(listener);
  12. },
  13. rmListener: function(listener) {
  14. var idx = this._listeners.indexOf(listener);
  15. if (idx > -1) {
  16. this._listeners.splice(idx, 1);
  17. }
  18. },
  19. rmAllListeners: function() {
  20. this._listeners = [];
  21. },
  22. emit: function() {
  23. var _this = this;
  24. var args = toArr(arguments);
  25. var listeners = clone(this._listeners);
  26. each(
  27. listeners,
  28. function(listener) {
  29. return listener.apply(_this, args);
  30. },
  31. this
  32. );
  33. }
  34. },
  35. {
  36. mixin: function(obj) {
  37. each(
  38. ['addListener', 'rmListener', 'emit', 'rmAllListeners'],
  39. function(val) {
  40. obj[val] = exports.prototype[val];
  41. }
  42. );
  43. obj._listeners = obj._listeners || [];
  44. }
  45. }
  46. );
  47. module.exports = exports;