Instances Where Constructors Return Values Other Than 'this'
In JavaScript, when a constructor is invoked using the new keyword, it generally returns the newly created object. However, under specific circumstances, it can return a different value to avoid returning this.
Conditions for Returning Other Values
As outlined in the ECMA-262 3rd Edition Specification's [[Construct]] internal property (step 7), the return value of a constructor (Result(6)) determines if this will be returned or not. If Result(6) is not an Object type, it will be returned instead of this. This condition is critical for the correct execution of the constructor.
Example
Consider the following constructor:
function Foo() { return 10; // Returning a non-object primitive } var foo = new Foo();
In this example, since 10 is a non-object primitive, it will be returned as the result of the Foo() constructor. Thus, foo will be assigned the primitive value 10, and (new Foo() instanceof Foo) will evaluate to false because foo is a primitive type.
Summary
In summary, a constructor can return values other than this only when the return value of the constructor (Result(6)) is not an Object type. This condition allows for the construction of objects with non-object values or for passing control to other constructors.
The above is the detailed content of When Can a JavaScript Constructor Return Something Other Than 'this'?. For more information, please follow other related articles on the PHP Chinese website!