How to override constructor of prototype/intercept object creation in JavaScript?

How to override constructor of prototype/intercept object creation in JavaScript?
javascript
Ethan Jackson

I would like to intercept all instance creations of EventSource. I tried the following code:

EventSource.prototype.constructor = function(url, config) { EventSource(url, config); console.log("intercepted"); }

to override the constructor. It does not work. But the following does work:

EventSource.prototype.sayHi = () => alert("Hi"); new EventSource("my-data").sayHi()

How can I achieve something similar for the constructor/in general instance creation?

I tried searching on the internet and the above code.

Answer

You could override the class itself:

class MyEventSource extends EventSource{ constructor(...args){ super(...args); console.log('EventSource created'); } } window.EventSource = MyEventSource; new EventSource("my-data")

Related Articles