EventDispatcher is used to provide a class an event-driven API. So if a class extends of EventDispatcher, it’s possible to add event listeners to its concrete objects. Of course it’s also possible to remove them and to test if an object has a particular event listener already set. Besides, you can use .dispatchEvent() to dispatch an event of a specific type to all respective event listeners. It’s important to highlight that only the event listeners of this particular object are called and not the event listeners of other objects. That’s the reason why your code posted at stackoverflow does not work. EventDispatcher is not a publish/subscribe mechanism. It’s seems to me your are actually looking for something like this.
Let me give you two typical usages of EventDispatcher in three.js:
EventDispatcher is used in context of object disposal. When you call .dispose() on an instance of Texture, Material or Geometry, .dispatchEvent() creates an event of type dispose. WebGLRenderer registered event listeners for all those objects so it can react on these events and perform clean up tasks.
EventDispatcher is used in controls development. If you create e.g. a GamePad class that should have an event based API, EventDispatcher provides the necessary methods for this. A good example is PointerLockConrols which informs other components with an event when the controls lock/unlock the mouse cursor.