|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité régulier
![]() Inscription : octobre 2005 Messages : 22 ![]() |
Bonjour, après des années passées à utiliser les frameworks existants j'essai de revenir à l'essentiel pour une meilleure compréhension.
En premier lieu je cherche à transposer mes connaissances de l'OO vers javascript à l'aide d'un bouquin (jS, gardez le meilleur de Douglas Crockford). Bon, bref. J'ai bien compris qu'il n'y a pas de notion de classe en JS et que tout est objet. Je vois aussi à quoi sert le prototype. Par contre, j'ai fait un petit test et il y a un truc qui m'échappe. Quelle est la différence entre les méthodes dosomething et sogood ?? A l’exécution j'obtiens exactement le même comportement (attendu). Dans ce cas, pourquoi devrais-je utiliser une déclaration par prototype ? Merci d'avance Code :
et Code :
|
||||
|
|
00
|
|
|
#2 | ||||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 872 ![]() |
Pour ta première question, il existera toujours UNE et UNE seule instance de la fonction "sogood".
Tandis que la fonction dosomething ne sera déclaré que lorsqu'un objet sera instancié et sera propre à cet objet, c'est à dire qu'il existera une fonction "dosomething" pour chaque objet instancié. Code :
tu peux tester si une fonction (ou attribut) est propre à un objet grace à la méthode "hasOwnProperty" l'avantage de redéclarer une méthode à l'intérieur de l'objet peut par exemple être utile pour accèder à des champs privés comme les getters. Code :
|
||||
|
|
00
|
|
|
#3 | |
![]() ![]() ![]() Didier MouronvalDéveloppeur Web Inscription : juin 2008 Messages : 13 808 ![]() |
Citation:
Lorsque tu déclares la méthode dans le constructeur, chaque instance de l'objet que tu vas créer va définir sa propre méthode, alors que si tu la déclares dans le prototype, chaque instance héritera de la même définition.
__________________
Pas de question technique par MP ! Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi ! Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi ! Mes formations video2brain : La formation complète sur JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux Mon livre sur jQuery
|
|
|
00
|
|
|
#4 | |||||||||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 872 ![]() |
Citation:
maintenant la différence entre : Code :
dans le premier cas, il s'agit d'une fonction nommée qui se également pointé par la variable "Player". en gros, les 2 façons de faire se valent et son (quasi) équivalentes. les deux sont en général autant utilisés. même si la function nommée permet (sous chrome et firefox mais pas IE) de renvoyer le nom de la fonction via l'attribut "name". ex : Code :
aussi si tu as l'habitude de coder dans des objets, tu auras plus tendances à utiliser l'assignation je pense, par habitude. ex : Code :
Code :
function alpha(){}/*pas besoin de ; ici*/alpha(); Code :
var alpha = function(){};/*besoin du ; ici pour clore l'assignation*/alpha(); |
|||||||||
|
|
10
|
|
|
#5 |
|
Invité régulier
![]() Inscription : octobre 2005 Messages : 22 ![]() |
Rha bin c'est bien sûr !
Merci beaucoup pour vos éclaircissements ! |
|
|
00
|
|
|
#6 | ||||||||
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Si si, ça existe, et non non ce n'est pas une erreur
C'est même très utile car le nom de la fonction apparaît dans la pile d'appel quand on fait du debug.Un exemple tout simple : Code HTML :
Code :
Code :
Code :
__________________
Disposition de clavier ergonomique française : Bépo |
||||||||
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 872 ![]() |
en fait, je parlais de nommer la fonction et de réassigner la fonction dans elle-même :
qui n'avait aucun sens et qui revenait à faire tout simplement : |
|
|
00
|
|
|
#9 | ||||
|
Membre régulier
![]() Inscription : décembre 2007 Messages : 61 ![]() |
Non ça ne revient pas vraiment au même.
L'une est une expression et l'autre est une déclaration, ce qui veut dire que les deux ne sont pas évaluées au même moment. La déclaration sera évaluée (elle ainsi que les autres déclarations qu'elle contient) à l'entrée du contexte), l'expression sera évaluée à l'execution. Cela peut avoir son importance en cas d'évaluation tardive (lazy init) ou de branchement de code. Si les invariantes à initialiser sont couteuse, très rarement utilisées ou si l'on veut implémenter un Strategy Pattern, il peut être utile de maitriser ces subtilités. Code :
Code :
|
||||
|
|
10
|
|
|
#10 | ||||||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 872 ![]() |
Clap Clap Clap.
Tu viens de m'apprendre qqe chose que je ne connaissais mais ABSOLUMENT pas en javascript. ![]() Je viens donc de lire un excellent article à ce sujet : http://kangax.github.com/nfe/ Donc comme tu le dis, ce n'est pas du tout pareil car : Code :
tandis que : Code :
edit: Un autre exemple impressionant donné dans l'article : Code :
|
||||||
|
|
00
|
|
|
#11 | ||||||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 872 ![]() |
je m'amuse comme un fou depuis qqes minutes avec ça, en fait ça peut avoir des conséquence effroyable pour ceux qui travaillent à plusieurs sur un gros projet sans savoir ce qui précède. (par exemple si chaque partie peut écrasser toutes les variables précédentes .. surtout une variable nommé "tmp" par exemple)
Code :
ou plus tordu : Code :
edit: en version plus extrême pour surcharger une méthode qui n'existe pas encore (enfin je veux dire qui se trouve en tout début de code) : Code :
|
||||||
|
|
00
|
|
|
#12 |
|
Membre régulier
![]() Inscription : décembre 2007 Messages : 61 ![]() |
Huhum, je vois que tu es allé puiser l'information directement à la meilleure source.
![]() Les articles de kangax sont effectivement la référence absolue sur ce sujet. Si cela t'intéresse tant que ça je te conseille la génialissime série d'articles "ECMA-262-3 in detail" de Dmitry Soshnikov. Notamment les deux premiers chapitres qui expliquent toutes les bases et mécanisme internes à l'origine de ces subtilités : http://dmitrysoshnikov.com/ecmascrip...tion-contexts/ Dans un autre registre tu as aussi cet autre article de kangax qui explique quelques différences entre les variables et les propriétés selon les types de contextes d'execution. (je te conseille de lire préalablement les deux premiers chapitres de soshnikov pour bien tout comprendre, mais tu peux faire sans). http://perfectionkills.com/understanding-delete/ |
|
|
00
|
|
|
#13 |
|
Membre expérimenté
![]() ![]() Duke Jikel Inscription : mai 2010 Messages : 340 ![]() |
Et sinon le très bon javascript.info a un article dessus :
http://javascript.info/tutorial/func...nd-expressions |
|
|
00
|
|
|
#14 | ||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 872 ![]() |
je suis devenu accro
Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com