What are the exact circumstances for which a return statement in Javascript can return a value other than this when a constructor is invoked using the new keyword?
Example:
function Foo () {
return something;
}
var foo = new Foo ();
If I’m not mistaken, if something is a non-function primitive, this will be returned. Otherwise something is returned. Is this correct?
In other words, what values can something take to cause (new Foo () instanceof Foo) === false?
The exact condition is described on the
[[Construct]]internal property, which is used by thenewoperator:From the ECMA-262 3rd. Edition Specification:
Look at steps 7 and 8, the new object will be returned only if the
type of
Result(6)(the value returned from theFconstructorfunction) is not an Object.