Kiedy powinienem automatycznie utworzyć obiekt, nawet jeśli „nowy” został zapomniany?
Powiedzmy, że mam następujący konstruktor obiektów:
function Foo(bar) {
this.bar = bar;
}
Jeśli uruchomię funkcję w zasięgu globalnym beznew
następnie słowo kluczowebar
zostanie ustawiony w dowolnym zakresieFoo()
jest wywoływany w:
var foo = Foo(42);
console.log(bar); // 42
console.log(foo.bar); // ERROR
Więc moim pomysłem jest zrobienie czegoś takiego:
function Foo(bar) {
if(!(this instanceof Foo)) {
// return a Foo object
return new Foo(bar);
}
this.bar = bar;
}
W ten sposób, jeśli to zrobięnew Foo(42)
lub Foo(42)
, byłobyzawsze zwróć aFoo
obiekt.
Czy to jestzawsze dobry pomysł? Jeśli tak, to kiedy? Kiedy (i dlaczego) mądrze byłoby unikać tej techniki?