For the same reason you might use EventEmitter
in node.js: you have some custom class/object which you would like to emit events.
Events are useful to allow your object to notify other parts of your code that something interesting has happened, without the object actually knowing anything about the code that uses it.
For example, a link on a page (implemented by the browser as an HTMLAnchorElement
object) does not need to know what your code does in response to clicks; you simply register a click
event handler (by calling EventTarget#addEventListener('click', …)
) and when clicks happen, the browser internally calls EventTarget#dispatchEvent(new Event('click'))
and your code handles the event.
Your own custom objects can use this pattern for a wide range of things. Perhaps you'd like to notify things that your object's data has changed -- either as a result of the user doing something or a fetch
call returning.
This allows you to build code that is easily composable and testable: the emitter doesn't care who is listening or what that code does, and the consumers don't care about the implementation details of the event getting fired.