diff --git a/packages/react-native/Libraries/vendor/emitter/EventEmitter.js b/packages/react-native/Libraries/vendor/emitter/EventEmitter.js index 6014db5bd7c..305965630f2 100644 --- a/packages/react-native/Libraries/vendor/emitter/EventEmitter.js +++ b/packages/react-native/Libraries/vendor/emitter/EventEmitter.js @@ -84,7 +84,7 @@ export default class EventEmitter< constructor() { // $FlowFixMe[incompatible-type] - this.#registry = {}; + this.#registry = Object.create(null); } /** @@ -147,7 +147,7 @@ export default class EventEmitter< ): void { if (eventType == null) { // $FlowFixMe[incompatible-type] - this.#registry = {}; + this.#registry = Object.create(null); } else { // $FlowFixMe[cannot-write] delete this.#registry[eventType]; diff --git a/packages/react-native/Libraries/vendor/emitter/__tests__/EventEmitter-itest.js b/packages/react-native/Libraries/vendor/emitter/__tests__/EventEmitter-itest.js index 7a746f0b47a..dc0fb8b9f7e 100644 --- a/packages/react-native/Libraries/vendor/emitter/__tests__/EventEmitter-itest.js +++ b/packages/react-native/Libraries/vendor/emitter/__tests__/EventEmitter-itest.js @@ -57,6 +57,27 @@ describe('listeners', () => { expect(listenerB).toHaveBeenCalledTimes(1); }); + it('supports event types that match Object prototype keys', () => { + const emitter = new EventEmitter>>(); + + const constructorListener = jest.fn(); + const protoListener = jest.fn(); + emitter.addListener('constructor', constructorListener); + emitter.addListener('__proto__', protoListener); + + emitter.emit('constructor'); + emitter.emit('__proto__'); + + expect(constructorListener).toHaveBeenCalledTimes(1); + expect(protoListener).toHaveBeenCalledTimes(1); + expect(emitter.listenerCount('constructor')).toBe(1); + expect(emitter.listenerCount('__proto__')).toBe(1); + + emitter.removeAllListeners(); + expect(emitter.listenerCount('constructor')).toBe(0); + expect(emitter.listenerCount('__proto__')).toBe(0); + }); + it('invokes listeners in registration order', () => { const emitter = new EventEmitter<{A: []}>();