277 votes

nouvelle MyObject() ; vs nouvelle MyObject ;

Dans certains JavaScript, des extraits de code (par ex. http://mckoss.com/jscript/object.htm) j'ai vu des objets créés de cette façon:

var obj = new Foo;

Cependant, au moins à la MDC, il semble que les parenthèses ne sont pas en option lors de la création d'un objet:

var obj = new Foo();

C'est l'ancienne façon de créer des objets valides et définis dans le standard ECMA? Existe-il des différences entre l'ancien chemin de la création d'objets et le plus tard? Est un privilégié par rapport à l'autre?

Merci à l'avance.

273voto

Daniel Vassallo Points 142049

Citant David Flanagan1:

Comme cas particulier, pour l' new opérateur seulement, JavaScript simplifie la grammaire en permettant la parenthèse être omis s'il n'y a pas d'arguments dans l'appel de fonction. Voici quelques exemples d'utilisation de l' new opérateur:

o = new Object;  // Optional parenthesis omitted here
d = new Date();  

...

Personnellement, j'ai toujours utiliser les parenthèses, même si le constructeur ne prend pas d'arguments.

En outre, JSLint peut blesser vos sentiments si vous omettez de la parenthèse. Il signale Missing '()' invoking a constructor, et il ne semble pas être une option pour l'outil de tolérer la parenthèse de l'omission.


1 David Flanagan: JavaScript le Guide Définitif: 4e Édition (page 75)

14voto

jbabey Points 20696

Je ne pense pas qu’il n’y a aucune différence lorsque vous utilisez l’opérateur « new ». Veillez à entrer dans cette habitude, car ces deux lignes de code ne sont pas les mêmes :

13voto

Josh Points 1919

Si vous n’avez pas d’arguments à passer, les parenthèses sont facultatives. L’omission leur est juste syntaxique.

8voto

guest Points 2252

https://people.mozilla.org/~jorendorff/es6-projet.html#sec-nouvelle-opérateur-runtime-sémantique-évaluation

Voici la partie de l'ES6 spécification qui définit la façon dont les deux variantes de fonctionner. L'absence de parenthèses variante passe un argument vide de la liste.

Fait intéressant, les deux formes ont différentes significations grammaticales. Cela arrive lorsque vous essayez d'accéder à un membre du résultat.

new Array.length // fails because Array.length is the number 1, not a constructor
new Array().length // 0

2voto

Ivan Points 2695
En conclusion, parler du baptême du Saint-Esprit et de feu, ou tout simplement du baptême du Saint-Esprit, c’est dire la même chose. Il n’y a donc aucune différence entre les deux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X