Skip to content

Commit 25c25b3

Browse files
retyuimeta-codesync[bot]
authored andcommitted
fix: Make EventTarget methods enumerable (#57247)
Summary: By spec `EventTarget` should have 3 enumerable methods (`addEventListener`, `removeEventListener` and `dispatchEvent`) <img width="458" height="250" alt="Screenshot 2026-06-17 at 12 50 15" src="https://github.com/user-attachments/assets/c78b19ef-34d8-4df1-9b7a-22117362a043" /> ## Changelog: [GENERAL] [CHANGED] - Make `EventTarget` methods enumerable by spec Pull Request resolved: #57247 Test Plan: Create aRN app and run code with/without commented code ```tsx // Object.defineProperties(EventTarget.prototype, { // addEventListener: { enumerable: true }, // removeEventListener: { enumerable: true }, // dispatchEvent: { enumerable: true }, // }); console.log('Start'); for (const key in new EventTarget()) { console.log({ key }); } console.log('End'); ``` Reviewed By: andrewdacenko Differential Revision: D108908236 Pulled By: Abbondanzo fbshipit-source-id: 0dbe8f008e32f026b02d82f74c591bd59ed93849
1 parent 0fc122c commit 25c25b3

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

packages/react-native/src/private/webapis/dom/events/EventTarget.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,13 @@ export default class EventTarget {
258258
}
259259
}
260260

261+
// $FlowFixMe[cannot-write]
262+
Object.defineProperties(EventTarget.prototype, {
263+
addEventListener: {enumerable: true},
264+
removeEventListener: {enumerable: true},
265+
dispatchEvent: {enumerable: true},
266+
});
267+
261268
setPlatformObject(EventTarget);
262269

263270
function validateCallback(callback: EventListener, methodName: string): void {

packages/react-native/src/private/webapis/dom/events/__tests__/EventTarget-itest.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,19 @@ function createListener(
5454
}
5555

5656
describe('EventTarget', () => {
57+
it('should have 3 enumerable methods', () => {
58+
const methods = new Set([
59+
'addEventListener',
60+
'removeEventListener',
61+
'dispatchEvent',
62+
]);
63+
for (const key in new EventTarget()) {
64+
expect(methods.has(key)).toBe(true);
65+
methods.delete(key);
66+
}
67+
expect(methods.size).toBe(0);
68+
});
69+
5770
describe('addEventListener', () => {
5871
it('should throw an error if event or callback are NOT passed', () => {
5972
const eventTarget = new EventTarget();

0 commit comments

Comments
 (0)