2
2
3
3
var domain ;
4
4
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
+
5
11
function EventEmitter ( ) {
6
12
EventEmitter . init . call ( this ) ;
7
13
}
@@ -44,7 +50,7 @@ EventEmitter.init = function() {
44
50
}
45
51
46
52
if ( ! this . _events || this . _events === Object . getPrototypeOf ( this ) . _events ) {
47
- this . _events = { } ;
53
+ this . _events = new EventHandlers ( ) ;
48
54
this . _eventsCount = 0 ;
49
55
}
50
56
@@ -211,7 +217,7 @@ EventEmitter.prototype.addListener = function addListener(type, listener) {
211
217
212
218
events = this . _events ;
213
219
if ( ! events ) {
214
- events = this . _events = { } ;
220
+ events = this . _events = new EventHandlers ( ) ;
215
221
this . _eventsCount = 0 ;
216
222
} else {
217
223
// To avoid recursion in the case that type === "newListener"! Before
@@ -296,7 +302,7 @@ EventEmitter.prototype.removeListener =
296
302
297
303
if ( list === listener || ( list . listener && list . listener === listener ) ) {
298
304
if ( -- this . _eventsCount === 0 )
299
- this . _events = { } ;
305
+ this . _events = new EventHandlers ( ) ;
300
306
else {
301
307
delete events [ type ] ;
302
308
if ( events . removeListener )
@@ -319,7 +325,7 @@ EventEmitter.prototype.removeListener =
319
325
if ( list . length === 1 ) {
320
326
list [ 0 ] = undefined ;
321
327
if ( -- this . _eventsCount === 0 ) {
322
- this . _events = { } ;
328
+ this . _events = new EventHandlers ( ) ;
323
329
return this ;
324
330
} else {
325
331
delete events [ type ] ;
@@ -346,11 +352,11 @@ EventEmitter.prototype.removeAllListeners =
346
352
// not listening for removeListener, no need to emit
347
353
if ( ! events . removeListener ) {
348
354
if ( arguments . length === 0 ) {
349
- this . _events = { } ;
355
+ this . _events = new EventHandlers ( ) ;
350
356
this . _eventsCount = 0 ;
351
357
} else if ( events [ type ] ) {
352
358
if ( -- this . _eventsCount === 0 )
353
- this . _events = { } ;
359
+ this . _events = new EventHandlers ( ) ;
354
360
else
355
361
delete events [ type ] ;
356
362
}
@@ -366,7 +372,7 @@ EventEmitter.prototype.removeAllListeners =
366
372
this . removeAllListeners ( key ) ;
367
373
}
368
374
this . removeAllListeners ( 'removeListener' ) ;
369
- this . _events = { } ;
375
+ this . _events = new EventHandlers ( ) ;
370
376
this . _eventsCount = 0 ;
371
377
return this ;
372
378
}
0 commit comments