Принципиальная разница между fn () и новым fn () в javascript

12

В чем все аспекты, вызывающие функцию с новым ключевым словом и без него, отличаются в javascript? Я имею в виду, что все вещи отличаются?

testFn() против new testFn()

ПСР
источник

Ответы:

13

newсоздает новый (пустой) объект и устанавливает thisна него, а затем вызывает функцию, которая действует как конструктор для объекта (путем манипулирования this. что - то ). Вызов той же функции без newключевого слова позволил бы ей действовать в соответствии с тем, что в thisданный момент означает.

user281377
источник
Есть ли что-нибудь еще к этому?
ПСР
@akp нет, это действительно так просто. За исключением того, что не было упомянуто, что если функция явно возвращает ссылочный тип, он возвращается newи созданный объект теряется.
Esailija
2
Использование newприведет к тому, что прототип нового объекта будет установлен так, чтобы он ссылался на прототип первой функции, которой передается новый объект. Я не думаю, что поведение может быть законно достигнуто с помощью других средств.
суперкат
Вы правы, я пропустил это.
user281377
1

Эти варианты синтаксически различны: при «новом» варианте предполагается, что функция является конструктором. Вариант без «нового» предполагает, что это не конструктор.

Гангнус
источник