DEV Community

Discussion on: What is Javascript's `new` keyword doing under the hood?

 
qwemaze profile image
Elias Baryshnikov • Edited

If constructor returns

    return {
      doors,
      color
    }
Enter fullscreen mode Exit fullscreen mode

it is a completely different from newObject object reference and after that if new2 returns the result of constructor the newObject would be just lost in the new2 scope.

So it have to be like

function Car(doors, color) {
    this.doors = doors;
    this.color = color;
    this.drive = () => console.log('Vroom!');
    return this // equals to `newObject` ref
}

function new2(constructor, ...constructorArgs) {
    const newObject = {};
    Object.setPrototypeOf(newObject, constructor.prototype);
    return constructor.apply(newObject, constructorArgs); // bind newObject to constructor's `this` reference and call with args
}
Enter fullscreen mode Exit fullscreen mode
Thread Thread
 
vincecampanale profile image
Vince Campanale

Ah okay, I see what you're saying now. I guess part of what I was trying to convey is that the constructor function can in fact return any object. In which case, the new function should just return that object as is.

What you've presented here is a more realistic edge case. I will think about a way to cover it in the article.

Great insights -- thank you.