Bonjour,
Je commence juste le Javascript. Je viens juste de regarder le cours de la POO en Javascript. J'ai cependant une question. Prenons l'exemple du cours :

var animal = function(nom) {
    this.nom = nom
}
animal.prototype.pattes = 4
animal.prototype.cri = '????'
animal.prototype.crier = function() { return this.cri }
animal.prototype.fourrure = {
    couleur : 'Arc-en-ciel',
    longueur : 'Courte',
}

var poney = new animal('Pouffy')
var chien = new animal('Balais-à-chiotte')

Mes questions sont :

  • this.nom = nom devrait-elle avoir un ; à la fin ? Ou plutôt une virgule si j'avais encore quelque chose après ?
  • Pourquoi la virgule est obligatoire dans couleur : 'Arc-en-ciel' et pas en-haut ? Et pourquoi il n'y a pas de this devant couleur ? C'est pourtant un attribut de l'objet fourrure comme this.nom l'est pour animal.

Merci de vos réponses.

16 réponses


Salut,

Alors oui fais attention à ça, @Grafikart a tendance à oublier les ';' en fin d'instruction dans beaucoup de ses tutos JS, ce qui est une très mauvaise habitude (ça doit venir du fait qu'il utilise Ruby, qui lui n'a ni accolades, ni ';', à la manière de Python par ex.).
Il utilise Chrome qui est assez permissif par rapport à ça mais, quoi qu'il en soit, il vaut mieux mettre un ';' à la fin de chaque instruction.

Pour ce qui est de la virgule, c'est parce que c'est un objet (on peut appeler ça une collection, c'est comme un array associatif en PHP), et les éléments d'un objet en JS doivent être, au même titre que ceux d'un array, séparés pas des virgules. Ce sont les bases du langage. Je t'invite à te documenter et à initier quelques recherches ;)

Wizix
Auteur

Les ; sont facultatifs en javascript non ? Donc autant ne pas les mettre je pense. Je développe aussi sous Python et Ruby donc ça m'arrange qu'il n'y ai pas besoin des ;. (Référence).

En faite ce qui me dérange, c'est que d'un côté c'est initialisé comme une variable avec this.nom = 'Gilbert' mais d'un autre c'est initialisé comme un dictionnaire couleur : blanc,. Pourquoi cette différence ? Sûrement parce que le premier est initialisé dans une fonction contrairement au second. Mais pourquoi initialiser le premier dans une fonction et pas le second ?

Merci de ton aide.

Non ils ne sont pas facultatifs je viens de te le dire !
Donc toi tu as décidé que c'était facultatif quoi. Bien sûr que non, tu ne peux pas redéfinir les specs d'un langage comme bon te semble.

Beh non car dans this.nom = 'Gilbert', this fait référence à l'objet animal , alors que animal.prototype.fourrure est un objet définit dans animal.

Bonjour,

<blockquote>
Les ; sont facultatifs en javascript non ? Donc autant ne pas les mettre je pense. Je développe aussi sous Python et Ruby donc ça m'arrange qu'il n'y ai pas besoin des ;
</blockquote>

Pourquoi poser la question si tu t'aies déjà fait ton propre avis ?

La fin d'une instruction en js est indiquée soit par un point-virgule soit par un retour à la ligne.
donc le point-virgule est facultatif.
Pourquoi met-on quand même des point-virules ?
ca permet au parser d'aller plus vite et ça évite des problèmes de minification
voir l'article SO

La vérité au sujet des point-virgules ici :)

@Huggy Je ne suis pas d'accord, le point-virgule est obligatoire sur les anciens navigateurs, certains moteurs de rendu JS ne sont pas aussi permissif que le V8 de Chrome :)

@BetaWeb, tu as sans doute raison
je viens de regarder bootstrap.js 3.2 et ils ne mettent pas de point-virgule !!! je n'ai pas regardé ce qu'ils indiquent pour la compatibilité des navigateurs ? (Edit : we support Internet Explorer 8-11. More)
je suppose qu'ils savent ce qu'ils font.

Sinon j'ai Jshint et jslint sous Netbeans, tous les 2 aboyent s'il manque un point-vigule.
Dans le doute mettez deux point-virgule :)

Contrairement à ce que laisse entendre une idée largement répandue, les points-virgules (;) ne sont pas obligatoires en JavaScript. Hormis quelques exceptions, un retour à la ligne aura exactement le même effet. Il ne s’agit pas d’une « tolérance » de certains navigateurs : cela fait partie de la spécification ECMAScript, et ce comportement (Automatic Semicolon Insertion) est parfaitement supporté par l’ensemble des moteurs JavaScript existants.

EDIT :

  • les minificateurs ajoutent les points virgules automatiquement
  • Il est vrai que c'est plus rapide pour le parseur d'avoir les points virgules mais la différence est à peine calculable
  • Il est plus rigoureux de mettre des points virgules

Je laisse le lien de la norme : http://bclary.com/2004/11/07/#a-7.9.1

Merci à vous les gars ça m'aide beaucoup aussi

Erreur 403 pour le lien de @earhater perso, voici donc le résultat de ma recherche google : spec JS (p154 du doc, numérotation réel, p134 numérotation du pdf). Citation :

Certain ECMAScript statements (empty statement, let, const, import, and export declarations, variable
statement, expression statement, debugger statement, continue statement, break statement, return
statement, and throw statement) must be terminated with semicolons. Such semicolons may always appear
explicitly in the source text. For convenience, however, such semicolons may be omitted from the source text in
certain situations. These situations are described by saying that semicolons are automatically inserted into the
source code token stream in those situations.

Pareille faudrai revoir le lien cher @earhater

@AlexTondoh tu remontes d'un cran et tu vas au chapitre 7.9.1

Bonsoir.

Erreur 403 pour le lien de @earhater perso
Pareille faudrai revoir le lien cher @earhater

Le lien est correct, si vous avez l'erreur 403, il vous suffit de placer votre curseur dans la barre d'adresse et d'appuyer sur la touche Enter/Entrée, (évitez la touche F5 ou l'icône d'actualisation lorsque vous avez l'erreur car elle peut à nouveau causer l'erreur).

Merci @Huggy