22
33var domain ;
44
5+ // This constructor is used to store event handlers. Instantiating this is
6+ // faster than explicitly calling `Object.create(null)` to get a "clean" empty
7+ // object (tested with v8 v4.9).
8+ function EventHandlers ( ) { }
9+ EventHandlers . prototype = Object . create ( null ) ;
10+
511function EventEmitter ( ) {
612 EventEmitter . init . call ( this ) ;
713}
@@ -44,7 +50,7 @@ EventEmitter.init = function() {
4450 }
4551
4652 if ( ! this . _events || this . _events === Object . getPrototypeOf ( this ) . _events ) {
47- this . _events = { } ;
53+ this . _events = new EventHandlers ( ) ;
4854 this . _eventsCount = 0 ;
4955 }
5056
@@ -211,7 +217,7 @@ EventEmitter.prototype.addListener = function addListener(type, listener) {
211217
212218 events = this . _events ;
213219 if ( ! events ) {
214- events = this . _events = { } ;
220+ events = this . _events = new EventHandlers ( ) ;
215221 this . _eventsCount = 0 ;
216222 } else {
217223 // To avoid recursion in the case that type === "newListener"! Before
@@ -296,7 +302,7 @@ EventEmitter.prototype.removeListener =
296302
297303 if ( list === listener || ( list . listener && list . listener === listener ) ) {
298304 if ( -- this . _eventsCount === 0 )
299- this . _events = { } ;
305+ this . _events = new EventHandlers ( ) ;
300306 else {
301307 delete events [ type ] ;
302308 if ( events . removeListener )
@@ -319,7 +325,7 @@ EventEmitter.prototype.removeListener =
319325 if ( list . length === 1 ) {
320326 list [ 0 ] = undefined ;
321327 if ( -- this . _eventsCount === 0 ) {
322- this . _events = { } ;
328+ this . _events = new EventHandlers ( ) ;
323329 return this ;
324330 } else {
325331 delete events [ type ] ;
@@ -346,11 +352,11 @@ EventEmitter.prototype.removeAllListeners =
346352 // not listening for removeListener, no need to emit
347353 if ( ! events . removeListener ) {
348354 if ( arguments . length === 0 ) {
349- this . _events = { } ;
355+ this . _events = new EventHandlers ( ) ;
350356 this . _eventsCount = 0 ;
351357 } else if ( events [ type ] ) {
352358 if ( -- this . _eventsCount === 0 )
353- this . _events = { } ;
359+ this . _events = new EventHandlers ( ) ;
354360 else
355361 delete events [ type ] ;
356362 }
@@ -366,7 +372,7 @@ EventEmitter.prototype.removeAllListeners =
366372 this . removeAllListeners ( key ) ;
367373 }
368374 this . removeAllListeners ( 'removeListener' ) ;
369- this . _events = { } ;
375+ this . _events = new EventHandlers ( ) ;
370376 this . _eventsCount = 0 ;
371377 return this ;
372378 }
0 commit comments