Скажем, у меня есть следующий конструктор объекта:
function Foo(bar) {
this.bar = bar;
}
Если я запустил функцию в глобальной области действия без ключевого слова new, тогда bar будет установлен в любой области Foo(), вызываемой в:
var foo = Foo(42);
console.log(bar); // 42
console.log(foo.bar); // ERROR
Итак, моя идея - сделать что-то вроде этого:
function Foo(bar) {
if(!(this instanceof Foo)) {
// return a Foo object
return new Foo(bar);
}
this.bar = bar;
}
Таким образом, если я делаю new Foo(42) или Foo(42), он будет всегда возвращать объект Foo.
Это хорошая идея? Если да, то когда? Когда (и почему) было бы разумно избегать этой техники?