Typically, in a constructor function, the object that is bound to this
within the function is returned by it when it is called with the new
prefix. But I would imagine that it's also possible (I think I even read this in crockford's book) to manually return your own value. Are there any places where such a practice is useful?
If you return a value type from the constructor, you'll get different behavior depending on if new
was used. That's how String
works. Look at this object in your JavaScript console:
{
s: String("abc"),
S: new String("abc")
}
Little s
contains a string value, but big S
contains a string Object. A subtle difference, perhaps.
You could go way beyond that and use the same function for different purposes:
function Foo() {
return "abc";
}
Foo.prototype.DoSomething = function () {
// something completely unrelated to "abc"
};
var a = Foo(); // The string "abc". Does not have a DoSomething() method.
var b = new Foo(); // An Object with a DoSomething() method. Doesn't know about "abc".
Depending on whether new
was used, you'd get back something completely different.