Скажем, у меня есть следующий конструктор объекта:
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
.
Это хорошая идея? Если да, то когда? Когда (и почему) было бы разумно избегать этой техники?