Différence fondamentale entre fn () et nouveau fn () en javascript

12

Dans tous les aspects, appeler une fonction avec et sans nouveau mot-clé diffère en javascript? Je veux dire de quoi toutes les choses diffèrent?

testFn() contre new testFn()

akp
la source

Réponses:

13

newcrée un nouvel objet (vide) et le définit this, puis appelle la fonction, qui agit comme constructeur de l'objet (en manipulant this. quelque chose ). Appeler la même fonction sans le newmot - clé lui permettrait d'agir sur ce que cela thissignifie actuellement.

user281377
la source
Y a-t-il autre chose à cela?
akp
@akp non c'est vraiment aussi simple que cela. Sauf ce qui n'a pas été mentionné, c'est que si la fonction renvoie explicitement un type de référence, celui-ci est renvoyé par newet l'objet créé est gaspillé.
Esailija
2
L'utilisation newentraînera la définition du prototype du nouvel objet pour faire référence à celle de la première fonction à laquelle le nouvel objet est transmis. Je ne pense pas que ce comportement puisse être légitimement atteint par d'autres moyens.
supercat
Vous avez raison, ça m'a manqué.
user281377
1

Ces variantes sont syntaxiquement différentes: avec "new" la variante suppose que la fonction est un constructeur. La variante sans "nouveau" suppose que ce n'est pas un constructeur.

Gangnus
la source