|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 840 ![]() |
Bonjour à tous. :-)
(mon premier poste) J'ai décidé, il y a quelques jours, de créer de l'héritage en javascript. (juste pour le fun, car aucune utilité apparente.) J'ai donc commencé par chercher les différentes version existantes sur la toile mais celles que j'ai trouvé semblaient "mal" fonctionner. Je me suis donc dis que je pouvais m’atteler à la tâche sans craindre de refaire ce qui existe déjà. Bref, voici mon code (qui devra certainement être amélioré). Code :
Code :
Voila, j'attend vos opinions avec impatience : Ca ne sert à rien ? Ca ne fonctionne pas ? Ca existe deja ? C'est une bonne idée à améliorer ? Suggestions ? Bonne lecture et merci pour votre attention. PS: code peu commenté mais j'ai essayé de le faire lisible .. puis y'a les tests pour le resultat. Car c'est ce qui compte in fine. |
||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 417 ![]() |
ça existe déjà
il existe des dizaines d'implémentations de la notion de classes en javascript je rappelle que JS est un langage à objet orienté prototype et l'exploitation de cette caractéristique est très efficace alors plutôt que réinventer la roue je t'invite à comprendre et à manipuler la notion de prototype tu découvrira que nombre de notion introduite avec les langages à objet orienté classe n'ont pas de raison d'être en javascript car le langage offre des solutions simples et élégantes. combiné au fait que js est un langage dynamique on obtient des capacités étonnantes A+JYT |
|
|
00
|
|
|
#3 |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 001 ![]() |
rien que ça j'en ai des boutons ...
Code :
var alert = function(val){document.write(val,"<hr>");};
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 840 ![]() |
Citation:
Citation:
bref, j'ai complètement retravaillé/nettoyé ma classe dont voici une nouvelle version : (ils manquent encore qqes trucs et n'est peut-être pas encore parfaite mais voilà) http://www.borisdessy.com/ Merci d'avance pour vos avis/suggestions/améliorations. |
||
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Jean Frederic Nault Inscription : juillet 2010 Messages : 61 ![]() |
tu serait surement intéressé a jeter un coup d'oeil a http://javascript.crockford.com/inheritance.html
|
|
|
00
|
|
|
#6 | |||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 840 ![]() |
Citation:
Code js :
ça instancie un seul objet A .... pour les 2 objets B et si on n'instanciait aucun objet B .. ça instancierait malgré tout un objet A et il me semble qu'il y avait aussi des bugs avec la fonction "uber" sur l'heritage de plus d'une classe ... mais j'ai plus ça en tête. edit: http://www.borisdessy.com/ vs http://www.borisdessy.com/crock.html |
|||
|
|
00
|
|
|
#7 | |||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 840 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 417 ![]() |
|
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 417 ![]() |
|
|
|
00
|
|
|
#10 | |
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 840 ![]() |
Citation:
Par contre je ne vois pas ce que tu as voulu me montrer avec le second ? |
|
|
|
00
|
|
|
#11 | |
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 840 ![]() |
Citation:
http://www.borisdessy.com/Ext.html 1) je n'arrive pas à appeler la fonction "foo" parente (mais là, j'avoue que c'est sans doute/peut-être moi qui suis incompétent) 2) il faut appeler explicitement, soi même, le constructeur parent d'une classe enfant. (c'est dommage selon moi). 3) les prototypes des classes hérités sont détruit comme on le voit clairement dans mes tests : un objet "C" perd son prototype "zz", ne possède pas le prototype "yy" de son parent "B" mais ne possède que le "xx" de la classe "A". A part seulement, en jetant un oeil à leurs code, je dois reconnaître que c'est le mieux fait que j'ai pu voir jusqu'à présent. (avec le mien, of course^^) |
|
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 840 ![]() |
Pour mon 3ème point, il suffit de rajouter 2 lignes dans leurs code, je vais leurs proposer l'update.
|
|
|
00
|
|
|
#13 | |
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 417 ![]() |
Citation:
n'a pas chercher à sacrifier celle de prototype mais à l'utiliser. et proposer pour chaque design patter de la Conception Orienté Objet une solution qui utilise au mieux la notion de classe et de prototype. une réflexion donc qui va au de la volonté de transforme js d'un langage de prototype vers un langage de classe et qui cher à englober d'autre notion qui l'accompagne A+JYT |
|
|
|
00
|
|
|
#14 | ||
|
Invité régulier
![]() Jo Inscription : novembre 2010 Messages : 25 ![]() |
Code :
Le seul hic, c'est la notion de 'super' qui n'existe pas en JavaScript |
||
|
|
00
|
|
|
#15 | |||||||||||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 840 ![]() |
Citation:
les problèmes comme je l'ai expliqué plus haut, c'est que : 1) 2) ça écrase les prototype de B 3) ça instancie un objet A même si aucun objet B n'est instancié 4) ça n'instancie qu'un seul objet A même si plusieurs objets B sont instanciés 5) par conséquence si A possède des objets, ses héritiés n'auront pas chacun un objet mais juste une référence vers cet objet unique créé lors du new A(); exmple Code :
Code :
Code :
En résumé, l'héritage sans fonction super/uber ce résume donc simplement à : Code :
|
|||||||||||
|
|
00
|
|
|
#16 | ||
|
Invité régulier
![]() Jo Inscription : novembre 2010 Messages : 25 ![]() |
Cela marche très bien pour moi
Code :
|
||
|
|
00
|
|
|
#17 | |||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 840 ![]() |
Citation:
Dans ton exemple tu instancies 4 fois A au lieu de 3. Édit: dans ton exemple tu pourrais meme carrément supprimer le B. Prototype = new A() et tu obtiendrais exactement les même résultats à tes tests. Ce qui montre bien qu'un exemple qui fonctionne n'est pas une preuve qu'une solution fonctionne. Contrairement à son opposée qui est vraie : un exemple qui ne fonctionne pas prouve qu'une solution ne fonctionne pas. ;-) |
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com