javascriptobjectprototype

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


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.


Solution

  • 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")