Page 1 sur 1

Tutoriel prototypes

Posté : 01 juil. 2008, 08:22
par mcorgnet
Bonjour,

je cherche un bon tutoriel sur la création de "classes" javascript (prototypes donc). Parce que j'ai toujours du mal à comprendre l'imbrication des fonctions dans les fonctions ...

Bref, les bases.

Vous avez ça sous la main ?

Posté : 01 juil. 2008, 09:55
par Berzemus
anglophone ou francophone ?

Posté : 01 juil. 2008, 09:55
par mcorgnet
Francophone, si possible ?

Sinon, okay pour l'anglais ...

Posté : 01 juil. 2008, 11:19
par Berzemus
Francophone je sais pas.. en anglais en tout cas, les sujets sont légion:
http://www.xml.com/pub/a/2006/06/07/obj ... cript.html
http://www.webdevelopersjournal.com/art ... egin3.html
ou encore ceci:
http://pagesperso-orange.fr/jean-paul.d ... /js06.html

Mais en général, c'est assez aisé à comprendre. On peut se dire que tout peut être une fonction, comme tout peut être un tableau aussi. Un objet étant alors un tableau de fonctions..

et juste une parenthèse, mais il n'y a pas de "classes" en prototype. Il n'y a que des objets, qu'on peut cloner et modifier, et créer de toute pièce (sans passer par des classes)

Le plus simple, c'est de créer un objet ex-nihilo:

Code : Tout sélectionner

var monobjet = { chaine:"lachaine", tableau:["el1","el2","el3"], methode1:function(var) { alert (var); }, methode2:function() { alert(this.chaine); } }
Hop, on a un objet "monobjet", avec quelques valeurs, et 2 méthodes. Pour compliquer, on aurait encore pu ajouter un objet dedans, mais ça devient lourd.

Après, on peut cloner l'objet:

Code : Tout sélectionner

var objet2 = monobjet;
(je sais plus s'il faut un new, pour le clonage. Probablement, à tester).

En prototype, tu peux aussi facilement ajouter des méthodes, en enlever, c'est autorisé et encouragé.

Code : Tout sélectionner

monobjet.methode3= function(var) { alert(var + this.chaine);}
C'est une façon plus naturelle (plus adaptée au prototype) que de passer par un "constructeur", comme ceci:

Code : Tout sélectionner

function monobjet () { this.chaine = "chaine"; this.tableau = array("el1","el2"); this.methode1 = function(var) {} } var objet = new monobjet;
Et il y a encore d'autres joyeusetés (le code source de JQuery est assez impressionnant), mais bon.. C'est assez chouette de découvrir JS.

Posté : 01 juil. 2008, 11:23
par mcorgnet
J'ai du mal à comprendre :

tu crées un objet sans avoir de "format" (classe), et tu le clones pour tous les objets suivants ?

Posté : 01 juil. 2008, 11:48
par Berzemus
Yep, c'est ça la programmation objet orientée prototype.

http://fr.wikipedia.org/wiki/Programmat ... _prototype
La programmation orientée prototype est une forme de programmation orientée objet sans classe, basée sur la notion de prototype. Un prototype est un objet à partir duquel on crée de nouveaux objets par clonage.

Mais comme toujours, en anglais c'est plus complet:
http://en.wikipedia.org/wiki/Prototype- ... rogramming

Posté : 01 juil. 2008, 12:09
par mcorgnet
Merci beaucoup de ton aide.

Ca suffira ;)

Posté : 01 juil. 2008, 12:25
par Berzemus
le problème, c'est que certains persistent a vouloir utiliser les "classes", vu qu'ils en ont l'habitude dans d'autres environnements (java, php,...). Du coup, on a des fonctions avec des fonctions dedans, dans lesquelles on peut a nouveau mettre des fonctions.. bref, ça à l'air complètement casse-gueule, mais c'est uniquement qu'on force une programmation par classes dans un langage qui est censé s'en passer.

J'utilise simplement le mantra "tout est objet, tout est fonction, tout est tableau", et jusque la tout va bien ^-^

Et pour bien continuer, un bon bouquin:
http://yuiblog.com/blog/2008/05/05/croc ... heritance/

avant de passer a la délégation d'évènements et patati et patata :wink:

B, qui commence à trop bien aimer JS.