10

What is the effect of a return statement in the body of JavaScript function when it's used as a constructor for a new object (with new keyword)?

1

2 Answers 2

21

Usually return simply exits the constructor. However, if the returned value is an Object, it is used as the new expression's value.

Consider:

function f() {
   this.x = 1;
   return;
}
alert((new f()).x);

displays 1, but

function f() {
   this.x = 1;
   return { x: 2};
}
alert((new f()).x);

displays 2.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks, it's just what I wanted to know.
2

The reason to use the new operator is to ensure that this inside the constructor refers to a new context, which supports:

this.functionName = function(){...};

, and to allow the use of the instanceof operator:

function foo() {...}
var bar = new foo();
alert(bar instanceof foo);

Using return {...} inside such a constructor negates both of these effects as this will not be needed with such a pattern, and as instanceof will return false.

1 Comment

Thanks for your response, i think this reveales a drawback of js constructors.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.