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()

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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.