new (js)

ref –

Prototype and Inheritance in JS (non-class)

Creating a user-defined object requires two steps:

1) Define the object type by writing a function.

2) Create an instance of the object with new.

To define an object type, create a function for the object type that specifies its name and properties. An object can have a property that is itself or another object.

When the code new Foo(…) is executed, the following things happen:

1) A new object is created, inheriting from Foo.prototype.

2) The constructor function Foo is called with the specified arguments, and with this bound to the newly created object. new Foo is equivalent to new Foo(), i.e. if no argument list is specified, Foo is called without arguments.

3) Normally constructors don’t return a value.

If the constructor function doesn’t explicitly return an object, the object created in step 1 is used instead.
However, sometimes, they can choose to do so if they want to override the normal object creation process of using step 1.
If they do return an object in the constructor function, then the object returned by the constructor function becomes the result of the whole new expression. Reference p would then point to this returned object.