В обычных случаях new
следует использовать при создании объектов из функции конструктора и избегать при выполнении любого другого вызова функции.При использовании new
в функции 1) создается новый объект;2) функция вызывается со значением this
, связанным с этим новым объектом, и 3) значением, возвращаемым функцией (по умолчанию), является объект, созданный на первом этапе.
Однако в вашем случае вы возвращаете совершенно новый объект из «конструктора» (отличного от объекта в 1) выше), что означает, что практических различий нет.Значение this
будет по-прежнему отличаться внутри функции, но оба они вернут false
:
new Foo() instanceof Foo;
Foo() instanceof Foo;
Чтобы проиллюстрировать разницу this
, добавьте следующее к Foo
:
alert(this instanceof Foo)
При вызове с new
это оповещения true
;при вызове без него false
.
Более того, нет смысла присваивать объект Foo.prototype
, потому что вы никогда не создадите экземпляров Foo
, которые бы его использовали (потому что, опять же,, вы возвращаете что-то совершенно отличное от Foo
).
Если вы собираетесь вернуть пользовательский объект из Foo
, тогда вы должны предпочесть версию без new
;нет смысла создавать новый экземпляр Foo
, если вы собираетесь его игнорировать и возвращать что-то совершенно другое.