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)?
-
See: stackoverflow.com/questions/1978049/…Christian C. Salvadó– Christian C. Salvadó2010-05-30 14:28:15 +00:00Commented May 30, 2010 at 14:28
Add a comment
|
2 Answers
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.
1 Comment
Tony
Thanks, it's just what I wanted to know.
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
Tony
Thanks for your response, i think this reveales a drawback of js constructors.