c'est quoi prototype ?

c'est quoi prototype ? - Flash/ActionScript - Programmation

Marsh Posté le 27-08-2004 à 22:57:41    

Dans un code source d'un jeu basé sur des tiles:
 
game.Tile0 = function () { };
game.Tile0.prototype.walkable = true;
game.Tile0.prototype.frame = 1;
 
Que veut dire prototype ?
 
si j'écris game.Tile0.frame = 1; ça ne ferait pas la même chose ?
 
Merci de m'éclairer, j'ai lu des tutoriels, mais j'ai jamais vraiment compris l'utilité de prototype.
 
Moi quand je crée un object je fais
 
obj = new Object();
 
et ensuite pour les propriétés de mon objet(on appele ça des instances ?) j'écris par exemple:
obj.name = "allo";
obj.machin = 25;
 
mais je n'utilise pas prototype.  :hello:

Reply

Marsh Posté le 27-08-2004 à 22:57:41   

Reply

Marsh Posté le 27-08-2004 à 23:49:05    

tu fais bien, prototype ça sert pas à ça :)
prototype ça sert à ajouter des méthodes à une classe.
 
exemple.
 

Code :
  1. Number.prototype.invert=function(){
  2.     return -this;
  3. }
  4. var x=12;
  5. trace(x.invert());


 
voilà, une fois que j'ai créé mon proto, je peux utilise invert() avec tous les nombres de l'animation.
c'est très pratique.
 
tu peux aussi le faire avec une classe perso :
 

Code :
  1. MaClasse=function(prop){  // création de ma classe
  2.      this.prop=prop;   // un attribut à la con
  3. }
  4. MaClasse.prototype.getProp=function(){   // ma fonction get
  5.      return this.prop;
  6. }
  7. var zob=new MaClasse(12);
  8. trace(zob.getProp());


 
enfin en tous cas, l'utiliser avec des propriétés c'est vraiment inutile.
si tu es sous 2004, ces problèmes ne se posent plus puisque maintenant, l'as2 est vraiment OO.
 
la technique que tu utilises n'est valable que lorsque ton objet est unique. à ce moment là en effet, pas besoin de créer de classe comme je viens de le faire.
 
si par contre, tu dois en avoir plusieurs, il vaut mieux faire de l'objet c'est clair.
 
si t'as des questions :)


Message édité par raytaller le 27-08-2004 à 23:50:48
Reply

Marsh Posté le 27-08-2004 à 23:58:18    

Citation :

et ensuite pour les propriétés de mon objet(on appele ça des instances ?)


 
nan.
une instance c'est un objet qui apartient à une classe.
quand tu fais :
var myXml=new XML();
ou var s=new Sound();
 
myXml et s sont des instances des classes XML et Sound.
 
s.load(.. );  ça c'est une méthode (une fonction de la classe)
s.truc=12;   ça c'est un attribut

Reply

Marsh Posté le 28-08-2004 à 08:13:43    

Merci  :jap:   :hello:
 
Mais je ne comprends pas très bien  :lol:  
 
Je suis en train de lire ce tutoriel:
 
http://www.flash-france.com/action [...] ticleid=16
 
Et je ne vois toujours pas la différence entre:
 
Chien=function(){
this.pattes=4
}
 
brutus= new chien();
rantanplan= new chien();
medor=new chien();
 
 
et:
 
Chien= function(){}
Chien.prototype.pattes=4;
brutus= new chien();
rantanplan= new chien();
medor=new chien();
 
medor.poilLong=true;
 
Je ne vois pas ce que prototype fait de plus, car dans le premier exemple si j'écris: trace(brutus.pattes); il retourne 4 alors je vois pas pourquoi je mettrais prototype pour définir pattes = 4; C'est l'utilité de plus que je ne comprends pas  [:chacal_one333]


Message édité par Nermal le 28-08-2004 à 21:10:53
Reply

Marsh Posté le 29-08-2004 à 14:42:06    

la différence c'est que tu ajoutes la propriété en dehors de la définiction de la classe.
 

Code :
  1. /* ajoute une propriété à la classe */
  2. Classe=function(){
  3.     this.prop="salut";
  4. }
  5. /* pareil */
  6. Classe=function(){
  7. }
  8. Classe.prototype.prop="salut";
  9. /* ajoute une propriété à l'instance */
  10. var zob=new Classe();
  11. zob.prop="salut";


Reply

Marsh Posté le 29-08-2004 à 14:44:20    

mais donc, de préférence directement dans la définition de la classe.
mais sinon, en as1 tu peux aussi faire de l'héritage  [:dawa]  
 
 
j'espère que c'est pas trop confus.. ça fait un bout de temps que j'ai pas  fait de poo  en as1.
 
à ton service pour d'autres questions


Message édité par raytaller le 22-11-2004 à 18:43:59
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed