diff --git a/lib/internal/event_target.js b/lib/internal/event_target.js index a539a7188c77ed..c0347d79d6cd3e 100644 --- a/lib/internal/event_target.js +++ b/lib/internal/event_target.js @@ -1022,12 +1022,12 @@ function makeEventHandler(handler) { return eventHandler; } -function defineEventHandler(emitter, name) { +function defineEventHandler(emitter, name, event = name) { // 8.1.5.1 Event handlers - basically `on[eventName]` attributes const propName = `on${name}`; function get() { validateInternalField(this, kHandlers, 'EventTarget'); - return this[kHandlers]?.get(name)?.handler ?? null; + return this[kHandlers]?.get(event)?.handler ?? null; } ObjectDefineProperty(get, 'name', { __proto__: null, @@ -1036,24 +1036,24 @@ function defineEventHandler(emitter, name) { function set(value) { validateInternalField(this, kHandlers, 'EventTarget'); - let wrappedHandler = this[kHandlers]?.get(name); + let wrappedHandler = this[kHandlers]?.get(event); if (wrappedHandler) { if (typeof wrappedHandler.handler === 'function') { - this[kEvents].get(name).size--; - const size = this[kEvents].get(name).size; - this[kRemoveListener](size, name, wrappedHandler.handler, false); + this[kEvents].get(event).size--; + const size = this[kEvents].get(event).size; + this[kRemoveListener](size, event, wrappedHandler.handler, false); } wrappedHandler.handler = value; if (typeof wrappedHandler.handler === 'function') { - this[kEvents].get(name).size++; - const size = this[kEvents].get(name).size; - this[kNewListener](size, name, value, false, false, false, false); + this[kEvents].get(event).size++; + const size = this[kEvents].get(event).size; + this[kNewListener](size, event, value, false, false, false, false); } } else { wrappedHandler = makeEventHandler(value); - this.addEventListener(name, wrappedHandler); + this.addEventListener(event, wrappedHandler); } - this[kHandlers].set(name, wrappedHandler); + this[kHandlers].set(event, wrappedHandler); } ObjectDefineProperty(set, 'name', { __proto__: null, diff --git a/test/parallel/test-eventtarget.js b/test/parallel/test-eventtarget.js index c3521d35d821bf..a6336cfee02467 100644 --- a/test/parallel/test-eventtarget.js +++ b/test/parallel/test-eventtarget.js @@ -614,6 +614,15 @@ let asyncTest = Promise.resolve(); target.dispatchEvent(new Event('foo')); deepStrictEqual(output, [1, 2, 3, 4]); } +{ + const target = new EventTarget(); + defineEventHandler(target, 'foo', 'bar'); + const output = []; + target.addEventListener('bar', () => output.push(1)); + target.onfoo = () => output.push(2); + target.dispatchEvent(new Event('bar')); + deepStrictEqual(output, [1, 2]); +} { const et = new EventTarget(); const listener = common.mustNotCall();