If there is a constructor like
function a() {}
then
(new a) instanceof a === true
But on the other hand,
function a() { return {} }
results in
(new a) instanceof a === false
So what I was thinking is that
function a() { return 123 }
would result in the same thing. However, when returning a Number,
(new a) instanceof a === true
How is this possible? Why can’t I make a constructor return something else than an Object?
(I do know making a constructor returning a Number is rather useless but I would like to understand the ‘why’ of this behaviour)
According to the spec: If calling the constructor returns an object, then this object is the result of the
new-expression. If the constructor doesn’t return an object (butundefinedor some other primitive value), the result is the newly created object.If primitives were allowed, then all constructors would have to explicitly return something (typically “
this“), otherwise the result would beundefined(because the result of a function without areturnisundefined). That would be a needless hassle.Additionally, it makes sense that
newcan be relied on to always return an object.