@@ -34,7 +34,7 @@ const {
34
34
ERR_INVALID_THIS ,
35
35
}
36
36
} = require ( 'internal/errors' ) ;
37
- const { validateObject, validateString } = require ( 'internal/validators' ) ;
37
+ const { validateObject, validateString, validateInternalField } = require ( 'internal/validators' ) ;
38
38
39
39
const {
40
40
customInspectSymbol,
@@ -492,6 +492,7 @@ function initEventTarget(self) {
492
492
self [ kEvents ] = new SafeMap ( ) ;
493
493
self [ kMaxEventTargetListeners ] = EventEmitter . defaultMaxListeners ;
494
494
self [ kMaxEventTargetListenersWarned ] = false ;
495
+ self [ kHandlers ] = new SafeMap ( ) ;
495
496
}
496
497
497
498
class EventTarget {
@@ -1021,34 +1022,46 @@ function makeEventHandler(handler) {
1021
1022
1022
1023
function defineEventHandler ( emitter , name ) {
1023
1024
// 8.1.5.1 Event handlers - basically `on[eventName]` attributes
1024
- ObjectDefineProperty ( emitter , `on${ name } ` , {
1025
+ const propName = `on${ name } ` ;
1026
+ function get ( ) {
1027
+ validateInternalField ( this , kHandlers , 'EventTarget' ) ;
1028
+ return this [ kHandlers ] ?. get ( name ) ?. handler ?? null ;
1029
+ }
1030
+ ObjectDefineProperty ( get , 'name' , {
1025
1031
__proto__ : null ,
1026
- get ( ) {
1027
- return this [ kHandlers ] ?. get ( name ) ?. handler ?? null ;
1028
- } ,
1029
- set ( value ) {
1030
- if ( ! this [ kHandlers ] ) {
1031
- this [ kHandlers ] = new SafeMap ( ) ;
1032
+ value : `get ${ propName } ` ,
1033
+ } ) ;
1034
+
1035
+ function set ( value ) {
1036
+ validateInternalField ( this , kHandlers , 'EventTarget' ) ;
1037
+ let wrappedHandler = this [ kHandlers ] ?. get ( name ) ;
1038
+ if ( wrappedHandler ) {
1039
+ if ( typeof wrappedHandler . handler === 'function' ) {
1040
+ this [ kEvents ] . get ( name ) . size -- ;
1041
+ const size = this [ kEvents ] . get ( name ) . size ;
1042
+ this [ kRemoveListener ] ( size , name , wrappedHandler . handler , false ) ;
1032
1043
}
1033
- let wrappedHandler = this [ kHandlers ] ?. get ( name ) ;
1034
- if ( wrappedHandler ) {
1035
- if ( typeof wrappedHandler . handler === 'function' ) {
1036
- this [ kEvents ] . get ( name ) . size -- ;
1037
- const size = this [ kEvents ] . get ( name ) . size ;
1038
- this [ kRemoveListener ] ( size , name , wrappedHandler . handler , false ) ;
1039
- }
1040
- wrappedHandler . handler = value ;
1041
- if ( typeof wrappedHandler . handler === 'function' ) {
1042
- this [ kEvents ] . get ( name ) . size ++ ;
1043
- const size = this [ kEvents ] . get ( name ) . size ;
1044
- this [ kNewListener ] ( size , name , value , false , false , false , false ) ;
1045
- }
1046
- } else {
1047
- wrappedHandler = makeEventHandler ( value ) ;
1048
- this . addEventListener ( name , wrappedHandler ) ;
1044
+ wrappedHandler . handler = value ;
1045
+ if ( typeof wrappedHandler . handler === 'function' ) {
1046
+ this [ kEvents ] . get ( name ) . size ++ ;
1047
+ const size = this [ kEvents ] . get ( name ) . size ;
1048
+ this [ kNewListener ] ( size , name , value , false , false , false , false ) ;
1049
1049
}
1050
- this [ kHandlers ] . set ( name , wrappedHandler ) ;
1051
- } ,
1050
+ } else {
1051
+ wrappedHandler = makeEventHandler ( value ) ;
1052
+ this . addEventListener ( name , wrappedHandler ) ;
1053
+ }
1054
+ this [ kHandlers ] . set ( name , wrappedHandler ) ;
1055
+ }
1056
+ ObjectDefineProperty ( set , 'name' , {
1057
+ __proto__ : null ,
1058
+ value : `set ${ propName } ` ,
1059
+ } ) ;
1060
+
1061
+ ObjectDefineProperty ( emitter , propName , {
1062
+ __proto__ : null ,
1063
+ get,
1064
+ set,
1052
1065
configurable : true ,
1053
1066
enumerable : true
1054
1067
} ) ;
0 commit comments