@@ -287,6 +287,12 @@ ObjectDefineProperty(EventEmitter, 'defaultMaxListeners', { |
287 | 287 | }, |
288 | 288 | }); |
289 | 289 |
|
| 290 | +function hasEventListener(self, type) { |
| 291 | + if (type === undefined) |
| 292 | + return self._events !== undefined; |
| 293 | + return self._events !== undefined && self._events[type] !== undefined; |
| 294 | +} |
| 295 | + |
290 | 296 | ObjectDefineProperties(EventEmitter, { |
291 | 297 | kMaxEventTargetListeners: { |
292 | 298 | __proto__: null, |
@@ -680,13 +686,11 @@ EventEmitter.prototype.removeListener = |
680 | 686 | function removeListener(type, listener) { |
681 | 687 | checkListener(listener); |
682 | 688 |
|
683 | | - const events = this._events; |
684 | | - if (events === undefined) |
| 689 | + if (!hasEventListener(this, type)) |
685 | 690 | return this; |
686 | 691 |
|
| 692 | + const events = this._events; |
687 | 693 | const list = events[type]; |
688 | | - if (list === undefined) |
689 | | - return this; |
690 | 694 |
|
691 | 695 | if (list === listener || list.listener === listener) { |
692 | 696 | this._eventsCount -= 1; |
@@ -742,9 +746,9 @@ EventEmitter.prototype.off = EventEmitter.prototype.removeListener; |
742 | 746 | */ |
743 | 747 | EventEmitter.prototype.removeAllListeners = |
744 | 748 | function removeAllListeners(type) { |
745 | | - const events = this._events; |
746 | | - if (events === undefined) |
| 749 | + if (!hasEventListener(this)) |
747 | 750 | return this; |
| 751 | + const events = this._events; |
748 | 752 |
|
749 | 753 | // Not listening for removeListener, no need to emit |
750 | 754 | if (events.removeListener === undefined) { |
@@ -789,14 +793,10 @@ EventEmitter.prototype.removeAllListeners = |
789 | 793 | }; |
790 | 794 |
|
791 | 795 | function _listeners(target, type, unwrap) { |
792 | | - const events = target._events; |
793 | | - |
794 | | - if (events === undefined) |
| 796 | + if (!hasEventListener(target, type)) |
795 | 797 | return []; |
796 | 798 |
|
797 | | - const evlistener = events[type]; |
798 | | - if (evlistener === undefined) |
799 | | - return []; |
| 799 | + const evlistener = target._events[type]; |
800 | 800 |
|
801 | 801 | if (typeof evlistener === 'function') |
802 | 802 | return unwrap ? [evlistener.listener || evlistener] : [evlistener]; |
|