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


12

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

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

Ответы:


13

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


Есть ли что-нибудь еще к этому?
ПСР

@akp нет, это действительно так просто. За исключением того, что не было упомянуто, что если функция явно возвращает ссылочный тип, он возвращается newи созданный объект теряется.
Esailija

2
Использование newприведет к тому, что прототип нового объекта будет установлен так, чтобы он ссылался на прототип первой функции, которой передается новый объект. Я не думаю, что поведение может быть законно достигнуто с помощью других средств.
суперкат

Вы правы, я пропустил это.
user281377

1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.