@@ -42,32 +42,30 @@ function lazyNow() {
42
42
return perf_hooks . performance . now ( ) ;
43
43
}
44
44
45
+ // TODO(joyeecheung): V8 snapshot does not support instance member
46
+ // initializers for now:
47
+ // https://bugs.chromium.org/p/v8/issues/detail?id=10704
48
+ const kType = Symbol ( 'type' ) ;
49
+ const kDefaultPrevented = Symbol ( 'defaultPrevented' ) ;
50
+ const kCancelable = Symbol ( 'cancelable' ) ;
51
+ const kTimestamp = Symbol ( 'timestamp' ) ;
52
+ const kBubbles = Symbol ( 'bubbles' ) ;
53
+ const kComposed = Symbol ( 'composed' ) ;
54
+ const kPropagationStopped = Symbol ( 'propagationStopped' ) ;
45
55
class Event {
46
- #type = undefined ;
47
- #defaultPrevented = false ;
48
- #cancelable = false ;
49
- #timestamp = lazyNow ( ) ;
50
-
51
- // None of these are currently used in the Node.js implementation
52
- // of EventTarget because there is no concept of bubbling or
53
- // composition. We preserve their values in Event but they are
54
- // non-ops and do not carry any semantics in Node.js
55
- #bubbles = false ;
56
- #composed = false ;
57
- #propagationStopped = false ;
58
-
59
-
60
56
constructor ( type , options ) {
61
57
if ( arguments . length === 0 )
62
58
throw new ERR_MISSING_ARGS ( 'type' ) ;
63
59
if ( options != null )
64
60
validateObject ( options , 'options' ) ;
65
61
const { cancelable, bubbles, composed } = { ...options } ;
66
- this . #cancelable = ! ! cancelable ;
67
- this . #bubbles = ! ! bubbles ;
68
- this . #composed = ! ! composed ;
69
- this . #type = `${ type } ` ;
70
- this . #propagationStopped = false ;
62
+ this [ kCancelable ] = ! ! cancelable ;
63
+ this [ kBubbles ] = ! ! bubbles ;
64
+ this [ kComposed ] = ! ! composed ;
65
+ this [ kType ] = `${ type } ` ;
66
+ this [ kDefaultPrevented ] = false ;
67
+ this [ kTimestamp ] = lazyNow ( ) ;
68
+ this [ kPropagationStopped ] = false ;
71
69
// isTrusted is special (LegacyUnforgeable)
72
70
Object . defineProperty ( this , 'isTrusted' , {
73
71
get ( ) { return false ; } ,
@@ -87,10 +85,10 @@ class Event {
87
85
} ) ;
88
86
89
87
return `${ name } ${ inspect ( {
90
- type : this . #type ,
91
- defaultPrevented : this . #defaultPrevented ,
92
- cancelable : this . #cancelable ,
93
- timeStamp : this . #timestamp ,
88
+ type : this [ kType ] ,
89
+ defaultPrevented : this [ kDefaultPrevented ] ,
90
+ cancelable : this [ kCancelable ] ,
91
+ timeStamp : this [ kTimestamp ] ,
94
92
} , opts ) } `;
95
93
}
96
94
@@ -99,20 +97,22 @@ class Event {
99
97
}
100
98
101
99
preventDefault ( ) {
102
- this . #defaultPrevented = true ;
100
+ this [ kDefaultPrevented ] = true ;
103
101
}
104
102
105
103
get target ( ) { return this [ kTarget ] ; }
106
104
get currentTarget ( ) { return this [ kTarget ] ; }
107
105
get srcElement ( ) { return this [ kTarget ] ; }
108
106
109
- get type ( ) { return this . #type ; }
107
+ get type ( ) { return this [ kType ] ; }
110
108
111
- get cancelable ( ) { return this . #cancelable ; }
109
+ get cancelable ( ) { return this [ kCancelable ] ; }
112
110
113
- get defaultPrevented ( ) { return this . #cancelable && this . #defaultPrevented; }
111
+ get defaultPrevented ( ) {
112
+ return this [ kCancelable ] && this [ kDefaultPrevented ] ;
113
+ }
114
114
115
- get timeStamp ( ) { return this . #timestamp ; }
115
+ get timeStamp ( ) { return this [ kTimestamp ] ; }
116
116
117
117
118
118
// The following are non-op and unused properties/methods from Web API Event.
@@ -121,19 +121,19 @@ class Event {
121
121
122
122
composedPath ( ) { return this [ kTarget ] ? [ this [ kTarget ] ] : [ ] ; }
123
123
get returnValue ( ) { return ! this . defaultPrevented ; }
124
- get bubbles ( ) { return this . #bubbles ; }
125
- get composed ( ) { return this . #composed ; }
124
+ get bubbles ( ) { return this [ kBubbles ] ; }
125
+ get composed ( ) { return this [ kComposed ] ; }
126
126
get eventPhase ( ) {
127
127
return this [ kTarget ] ? Event . AT_TARGET : Event . NONE ;
128
128
}
129
- get cancelBubble ( ) { return this . #propagationStopped ; }
129
+ get cancelBubble ( ) { return this [ kPropagationStopped ] ; }
130
130
set cancelBubble ( value ) {
131
131
if ( value ) {
132
132
this . stopPropagation ( ) ;
133
133
}
134
134
}
135
135
stopPropagation ( ) {
136
- this . #propagationStopped = true ;
136
+ this [ kPropagationStopped ] = true ;
137
137
}
138
138
139
139
static NONE = 0 ;
@@ -157,15 +157,8 @@ Object.defineProperty(Event.prototype, SymbolToStringTag, {
157
157
// the linked list makes dispatching faster, even if adding/removing is
158
158
// slower.
159
159
class Listener {
160
- next ;
161
- previous ;
162
- listener ;
163
- callback ;
164
- once ;
165
- capture ;
166
- passive ;
167
-
168
160
constructor ( previous , listener , once , capture , passive ) {
161
+ this . next = undefined ;
169
162
if ( previous !== undefined )
170
163
previous . next = this ;
171
164
this . previous = previous ;
@@ -197,7 +190,9 @@ class EventTarget {
197
190
// symbol as EventTarget may be used cross-realm. See discussion in #33661.
198
191
static [ kIsEventTarget ] = true ;
199
192
200
- [ kEvents ] = new Map ( ) ;
193
+ constructor ( ) {
194
+ this [ kEvents ] = new Map ( ) ;
195
+ }
201
196
202
197
[ kNewListener ] ( size , type , listener , once , capture , passive ) { }
203
198
[ kRemoveListener ] ( size , type , listener , capture ) { }
@@ -355,17 +350,22 @@ Object.defineProperty(EventTarget.prototype, SymbolToStringTag, {
355
350
value : 'EventTarget' ,
356
351
} ) ;
357
352
353
+ const kMaxListeners = Symbol ( 'maxListeners' ) ;
354
+ const kMaxListenersWarned = Symbol ( 'maxListenersWarned' ) ;
358
355
class NodeEventTarget extends EventTarget {
359
356
static defaultMaxListeners = 10 ;
360
357
361
- #maxListeners = NodeEventTarget . defaultMaxListeners ;
362
- #maxListenersWarned = false ;
358
+ constructor ( ) {
359
+ super ( ) ;
360
+ this [ kMaxListeners ] = NodeEventTarget . defaultMaxListeners ;
361
+ this [ kMaxListenersWarned ] = false ;
362
+ }
363
363
364
364
[ kNewListener ] ( size , type , listener , once , capture , passive ) {
365
- if ( this . #maxListeners > 0 &&
366
- size > this . #maxListeners &&
367
- ! this . #maxListenersWarned ) {
368
- this . #maxListenersWarned = true ;
365
+ if ( this [ kMaxListeners ] > 0 &&
366
+ size > this [ kMaxListeners ] &&
367
+ ! this [ kMaxListenersWarned ] ) {
368
+ this [ kMaxListenersWarned ] = true ;
369
369
// No error code for this since it is a Warning
370
370
// eslint-disable-next-line no-restricted-syntax
371
371
const w = new Error ( 'Possible EventTarget memory leak detected. ' +
@@ -382,12 +382,12 @@ class NodeEventTarget extends EventTarget {
382
382
383
383
setMaxListeners ( n ) {
384
384
validateInteger ( n , 'n' , 0 ) ;
385
- this . #maxListeners = n ;
385
+ this [ kMaxListeners ] = n ;
386
386
return this ;
387
387
}
388
388
389
389
getMaxListeners ( ) {
390
- return this . #maxListeners ;
390
+ return this [ kMaxListeners ] ;
391
391
}
392
392
393
393
eventNames ( ) {
0 commit comments