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?

questionAnswers(4)

yourAnswerToTheQuestion