|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre confirmé
![]() gwendal toullecDéveloppeur informatique Inscription : juillet 2009 Messages : 136 ![]() |
Bonjour à tous, je suis actuellement le tuto de Thierry Templier sur la POO en javascript et j'ai une question concernant la partie 2. Ayant besoin de mettre en pratique une "objectisation" de gros code JS je voulais créer des classes héritées pour factoriser du code redondant. J'en suis donc arrivé à retenir la dernière solution proposée avant la partie héritage multiple à savoir:
Code :
Code :
|
||||
|
10
|
|
|
#2 | ||||
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 421 ![]() |
La bonne pratique est d'utiliser la POO de JS telle que le langage la définit c'est à dire un POO à base de prototype
et non à base de classe lire donc http://fr.wikipedia.org/wiki/Program...%A9e_prototype mieux http://en.wikipedia.org/wiki/Prototy...ed_programming et pour en saisir les avantages un peu de théorie ne fait pas de mal http://fr.wikipedia.org/wiki/Th%C3%A9orie_du_prototype si tu veux donc de bonne pratique ne définit pas de classe reproduire la poo à base de classes avec un langage à prototype c'est possible ça fonctionne ça n'apporte rien n'utiliser que la POO à base de classe créé réduit considérablement les capacité du langage et ce qui serait fait de façon simple avec le langage devient compliqué à réalisé avec les classes un exemple simple javascript connait la notion d'objet nativement java ne connait que la notion d'instance d'une classe pour obtenir un singleton avec java il faut définir une classe qui contient un membre statique privé un créateur privé et une methode factory puis il faut appeler la méthode factory pour que l'objet existe Code :
en javascript et en langage à prototype Code :
l'héritage d'objet est beaucoup plus puissant que l'héritage de classe. A+JYT |
||||
|
|
40
|
|
|
#3 | |
|
Expert Confirmé Sénior
![]() Romain VALERIPOOête Inscription : avril 2008 Messages : 2 573 ![]() |
Citation:
>>> Pour visser quelque chose, un couteau cassé et limé ne fera jamais un aussi boulot qu'un tournevis (heu... je ne suis pas sur qu'elle soit d'une grande clarté cette métaphore bref tenons-nous en aux excellentes explications du camarade sekaijin
__________________
...pour les linguistes et les curieux >>> générateur de phrases aléatoires __________________ |
|
|
|
00
|
|
|
#4 | |
|
Membre confirmé
![]() gwendal toullecDéveloppeur informatique Inscription : juillet 2009 Messages : 136 ![]() |
merci pour les liens intéressants !
cependant tu es passé à coté de ma question. Quand tu dis : Citation:
L'auteur des tutos utilise la notation "maClasse" pour faciliter l'association d'idées mais je pense que ce sont des objets hérités par prototypage qui sont utilisés. Ce qui nous placerais déjà dans le contexte des bonnes pratiques que tu défends. Cependant un grand merci pour ta réponse qui aura eu l'avantage de me faire potasser encore un peu ![]() Ma question je le rappelle est assez concise : est-ce que je peux me permettre d’appeler la fonction hériter (cf: tuto) avant de créer par prototype les méthodes de la "classe" (ou objet) fille ou non? |
|
|
10
|
|
|
#5 | ||
|
Membre à l'essai
![]() ![]() Inscription : juin 2007 Messages : 11 ![]() |
Bonjour,
Si tu réinitialises le prototype (MaClasse.prototype = { ...) après avoir appelé la fonction d'héritage, tu vas perdre tout ce que tu as copié sur ce prototype. Il faut que tu t'arranges pour initialiser le prototype dans le bon ordre avec ce que tu veux mettre dedans @sekaijin: je suis bien d'accord avec toi que JavaScript fonctionne de manière complètement différente de Java (ou des langages à base de classe). Concernant les instances uniques, il est clair qu'il n'est pas nécessaire d'utiliser des "classes" pour créer les instances. Par contre, quand tu as potentiellement plusieurs instances sur le même "moule", il est important d'utiliser une approche où l'instance est créée à partir du prototype. Sinon tu auras autant d'instanciation de méthodes d'objets que d'objets. Ce n'est pas le cas avec les prototypes où ces méthodes sont partagées. Il est également à noter que JavaScript offre la méthode Object.create qui permet d'instancier un objet à partir d'un "moule" (ce moule peut-être vu comme une classe). Cette méthode ne fait pas autre chose que d'affecter le "moule" sur le prototype de l'objet: Code :
Thierry |
||
|
|
20
|
|
|
#6 | |
|
Membre à l'essai
![]() ![]() Inscription : juin 2007 Messages : 11 ![]() |
Citation:
|
|
|
|
20
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() Romain VALERIPOOête Inscription : avril 2008 Messages : 2 573 ![]() |
Je ne veux pas dénigrer le travail des petits camarades (donc pardon d'avance thierry !
__________________
...pour les linguistes et les curieux >>> générateur de phrases aléatoires __________________ |
|
|
00
|
|
|
#8 |
|
Membre confirmé
![]() gwendal toullecDéveloppeur informatique Inscription : juillet 2009 Messages : 136 ![]() |
bah en fait c'était dans le cas ou j'avais une méthode de la classe fille portant le même nom qu'un méthode de la classe mère que je voulais overrider. Dans ce cas je ne perds pas d'autres informations que celles liées à la méthodes à surcharger, si ?
|
|
10
|
|
|
#9 |
|
Membre à l'essai
![]() ![]() Inscription : juin 2007 Messages : 11 ![]() |
@Romain: pas de souci!
@Gwendal: oui tu perds uniquement la méthode de la classe mère car elle est "remplacée" par celle de la classe fille. Thierry |
|
|
10
|
|
|
#10 | |
|
Membre confirmé
![]() gwendal toullecDéveloppeur informatique Inscription : juillet 2009 Messages : 136 ![]() |
Citation:
au plaisir de te lire. ++ |
|
|
10
|
Copyright © 2000-2012 - www.developpez.com