Bonjour,
// Constructeur Individu
var MyIndividu = function()
{
// Recuperation des donnees
if(arguments.length == 1)
this.nom = arguments[0] ;
}
// Nom
MyIndividu.prototype.nom = "";
// Affichage de l'individu
MyIndividu.prototype.affiche = function()
{
alert(""" + this.nom + """);
}
// Constructeur Agenda
var MyAgenda = function()
{
this.listeIndividu = new Array();
}
// Liste des individus
MyAgenda.prototype.listeIndividu = null;
// On enregistre un nouvel individu
MyAgenda.prototype.setIndividu = function()
{
var newIndividu = new MyIndividu(arguments[0]);
this.listeIndividu.push(newIndividu);
}
// On affiche tout les individus
MyAgenda.prototype.getAllIndividu = function()
{
for(var i = 0; i < this.listeIndividu.length; i++)
this.listeIndividu[i].affiche();
}
Une question d'appellation , qu'est ce que MyAgenda ? peut on parler
d'une classe et quand on l'instancie peut on parler d'un objet.
Merci pour vos réponses,
Matt...
Bonjour,
// Constructeur Individu
var MyIndividu = function()
{
// Recuperation des donnees
if(arguments.length == 1)
this.nom = arguments[0] ;
}
// Nom
MyIndividu.prototype.nom = "";
// Affichage de l'individu
MyIndividu.prototype.affiche = function()
{
alert(""" + this.nom + """);
}
// Constructeur Agenda
var MyAgenda = function()
{
this.listeIndividu = new Array();
}
// Liste des individus
MyAgenda.prototype.listeIndividu = null;
// On enregistre un nouvel individu
MyAgenda.prototype.setIndividu = function()
{
var newIndividu = new MyIndividu(arguments[0]);
this.listeIndividu.push(newIndividu);
}
// On affiche tout les individus
MyAgenda.prototype.getAllIndividu = function()
{
for(var i = 0; i < this.listeIndividu.length; i++)
this.listeIndividu[i].affiche();
}
Une question d'appellation , qu'est ce que MyAgenda ? peut on parler
d'une classe et quand on l'instancie peut on parler d'un objet.
Merci pour vos réponses,
Matt...
Bonjour,
// Constructeur Individu
var MyIndividu = function()
{
// Recuperation des donnees
if(arguments.length == 1)
this.nom = arguments[0] ;
}
// Nom
MyIndividu.prototype.nom = "";
// Affichage de l'individu
MyIndividu.prototype.affiche = function()
{
alert(""" + this.nom + """);
}
// Constructeur Agenda
var MyAgenda = function()
{
this.listeIndividu = new Array();
}
// Liste des individus
MyAgenda.prototype.listeIndividu = null;
// On enregistre un nouvel individu
MyAgenda.prototype.setIndividu = function()
{
var newIndividu = new MyIndividu(arguments[0]);
this.listeIndividu.push(newIndividu);
}
// On affiche tout les individus
MyAgenda.prototype.getAllIndividu = function()
{
for(var i = 0; i < this.listeIndividu.length; i++)
this.listeIndividu[i].affiche();
}
Une question d'appellation , qu'est ce que MyAgenda ? peut on parler
d'une classe et quand on l'instancie peut on parler d'un objet.
Merci pour vos réponses,
Matt...
Matt a écrit :Bonjour,
Bonjour,// Constructeur Individu
var MyIndividu = function()
{
// Recuperation des donnees
if(arguments.length == 1)
this.nom = arguments[0] ;
}
JS est très souple au niveau du passage d'arguments, pas besoin de
s'assurer s'ils ont bien été passés.
Sauf, bien sûr, s'ils sont impliqués dans la construction de l'objet
mais, dans le cas présent, j'utiliserais plutôt un "setter" pour le nom,
donc une méthode genre "setNom(nom)", pour être cohérent avec la méthode
"setIndividu()" définie plus bas.// Nom
MyIndividu.prototype.nom = "";
C'est théoriquement correct, mais là je ne vois pas l'intérêt du
prototypage.
Je n'en connais que deux usages intéressants :
1. Eviter d'encombrer la mémoire dès la création d'un nouvel objet. Pour
une propriété, ça vaut le coup si elle est de type composée, et a
fortiori de type objet, mais pas scalaire comme ici.
2. Modulariser le code, ce qui va de soi pour une méthode, mais pas trop
pour une propriété.// Affichage de l'individu
MyIndividu.prototype.affiche = function()
{
alert(""" + this.nom + """);
}
On va dire que la méthode "alert()" est là seulement pour mettre quelque
chose.
Si c'est pour le débogage, je conseillerai plutôt "console.log()".// Constructeur Agenda
var MyAgenda = function()
{
this.listeIndividu = new Array();
}
Pas cohérent avec l'initialisation du nom qui est une chaîne littérale.
Donc, soit le nom est initialisé avec "new String", soit la liste est
initialisée avec "[]".// Liste des individus
MyAgenda.prototype.listeIndividu = null;
Pourquoi prototyper, puisque la liste est définie dans le constructeur ?
Cela dit, comme c'est une liste d'objets (qui peuvent donc grossir) je
préfère cette solution, mais alors il ne faut pas la définir avant !// On enregistre un nouvel individu
MyAgenda.prototype.setIndividu = function()
{
var newIndividu = new MyIndividu(arguments[0]);
this.listeIndividu.push(newIndividu);
}
Pareil que ma première remarque, autant passer un argument nommé à la
méthode "setIndividu(nom)".// On affiche tout les individus
MyAgenda.prototype.getAllIndividu = function()
{
for(var i = 0; i < this.listeIndividu.length; i++)
this.listeIndividu[i].affiche();
}
Petite astuce au cas où la liste serait importante : la condition de
répétition de la boucle est évaluée avant chaque passage, donc mieux
vaut définir une variable égale au nombre d'éléments à traiter juste
avant la boucle, ce sera plus rapide.
Par exemple :
var nbIndividus = this.listeIndividu.length;
for(var i = 0; i < nbIndividus; i++) { ... }Une question d'appellation , qu'est ce que MyAgenda ? peut on parler
d'une classe et quand on l'instancie peut on parler d'un objet.
Avec les versions 1.x, pas vraiment. La version 2 introduit la notion de
classe et d'instanciation, mais elle n'est implémentée que dans les
moteurs ActionScript.
Donc, pour les moteurs JS des clients Web, ce ne sont que des objets
primitifs que l'on copie avec le mot clé "new", d'où la notion générale
de prototypage associée à ce langage (cela fait partie de son paradigme).Merci pour vos réponses,
Matt...
Cordialement,
Pascal
Matt a écrit :
Bonjour,
Bonjour,
// Constructeur Individu
var MyIndividu = function()
{
// Recuperation des donnees
if(arguments.length == 1)
this.nom = arguments[0] ;
}
JS est très souple au niveau du passage d'arguments, pas besoin de
s'assurer s'ils ont bien été passés.
Sauf, bien sûr, s'ils sont impliqués dans la construction de l'objet
mais, dans le cas présent, j'utiliserais plutôt un "setter" pour le nom,
donc une méthode genre "setNom(nom)", pour être cohérent avec la méthode
"setIndividu()" définie plus bas.
// Nom
MyIndividu.prototype.nom = "";
C'est théoriquement correct, mais là je ne vois pas l'intérêt du
prototypage.
Je n'en connais que deux usages intéressants :
1. Eviter d'encombrer la mémoire dès la création d'un nouvel objet. Pour
une propriété, ça vaut le coup si elle est de type composée, et a
fortiori de type objet, mais pas scalaire comme ici.
2. Modulariser le code, ce qui va de soi pour une méthode, mais pas trop
pour une propriété.
// Affichage de l'individu
MyIndividu.prototype.affiche = function()
{
alert(""" + this.nom + """);
}
On va dire que la méthode "alert()" est là seulement pour mettre quelque
chose.
Si c'est pour le débogage, je conseillerai plutôt "console.log()".
// Constructeur Agenda
var MyAgenda = function()
{
this.listeIndividu = new Array();
}
Pas cohérent avec l'initialisation du nom qui est une chaîne littérale.
Donc, soit le nom est initialisé avec "new String", soit la liste est
initialisée avec "[]".
// Liste des individus
MyAgenda.prototype.listeIndividu = null;
Pourquoi prototyper, puisque la liste est définie dans le constructeur ?
Cela dit, comme c'est une liste d'objets (qui peuvent donc grossir) je
préfère cette solution, mais alors il ne faut pas la définir avant !
// On enregistre un nouvel individu
MyAgenda.prototype.setIndividu = function()
{
var newIndividu = new MyIndividu(arguments[0]);
this.listeIndividu.push(newIndividu);
}
Pareil que ma première remarque, autant passer un argument nommé à la
méthode "setIndividu(nom)".
// On affiche tout les individus
MyAgenda.prototype.getAllIndividu = function()
{
for(var i = 0; i < this.listeIndividu.length; i++)
this.listeIndividu[i].affiche();
}
Petite astuce au cas où la liste serait importante : la condition de
répétition de la boucle est évaluée avant chaque passage, donc mieux
vaut définir une variable égale au nombre d'éléments à traiter juste
avant la boucle, ce sera plus rapide.
Par exemple :
var nbIndividus = this.listeIndividu.length;
for(var i = 0; i < nbIndividus; i++) { ... }
Une question d'appellation , qu'est ce que MyAgenda ? peut on parler
d'une classe et quand on l'instancie peut on parler d'un objet.
Avec les versions 1.x, pas vraiment. La version 2 introduit la notion de
classe et d'instanciation, mais elle n'est implémentée que dans les
moteurs ActionScript.
Donc, pour les moteurs JS des clients Web, ce ne sont que des objets
primitifs que l'on copie avec le mot clé "new", d'où la notion générale
de prototypage associée à ce langage (cela fait partie de son paradigme).
Merci pour vos réponses,
Matt...
Cordialement,
Pascal
Matt a écrit :Bonjour,
Bonjour,// Constructeur Individu
var MyIndividu = function()
{
// Recuperation des donnees
if(arguments.length == 1)
this.nom = arguments[0] ;
}
JS est très souple au niveau du passage d'arguments, pas besoin de
s'assurer s'ils ont bien été passés.
Sauf, bien sûr, s'ils sont impliqués dans la construction de l'objet
mais, dans le cas présent, j'utiliserais plutôt un "setter" pour le nom,
donc une méthode genre "setNom(nom)", pour être cohérent avec la méthode
"setIndividu()" définie plus bas.// Nom
MyIndividu.prototype.nom = "";
C'est théoriquement correct, mais là je ne vois pas l'intérêt du
prototypage.
Je n'en connais que deux usages intéressants :
1. Eviter d'encombrer la mémoire dès la création d'un nouvel objet. Pour
une propriété, ça vaut le coup si elle est de type composée, et a
fortiori de type objet, mais pas scalaire comme ici.
2. Modulariser le code, ce qui va de soi pour une méthode, mais pas trop
pour une propriété.// Affichage de l'individu
MyIndividu.prototype.affiche = function()
{
alert(""" + this.nom + """);
}
On va dire que la méthode "alert()" est là seulement pour mettre quelque
chose.
Si c'est pour le débogage, je conseillerai plutôt "console.log()".// Constructeur Agenda
var MyAgenda = function()
{
this.listeIndividu = new Array();
}
Pas cohérent avec l'initialisation du nom qui est une chaîne littérale.
Donc, soit le nom est initialisé avec "new String", soit la liste est
initialisée avec "[]".// Liste des individus
MyAgenda.prototype.listeIndividu = null;
Pourquoi prototyper, puisque la liste est définie dans le constructeur ?
Cela dit, comme c'est une liste d'objets (qui peuvent donc grossir) je
préfère cette solution, mais alors il ne faut pas la définir avant !// On enregistre un nouvel individu
MyAgenda.prototype.setIndividu = function()
{
var newIndividu = new MyIndividu(arguments[0]);
this.listeIndividu.push(newIndividu);
}
Pareil que ma première remarque, autant passer un argument nommé à la
méthode "setIndividu(nom)".// On affiche tout les individus
MyAgenda.prototype.getAllIndividu = function()
{
for(var i = 0; i < this.listeIndividu.length; i++)
this.listeIndividu[i].affiche();
}
Petite astuce au cas où la liste serait importante : la condition de
répétition de la boucle est évaluée avant chaque passage, donc mieux
vaut définir une variable égale au nombre d'éléments à traiter juste
avant la boucle, ce sera plus rapide.
Par exemple :
var nbIndividus = this.listeIndividu.length;
for(var i = 0; i < nbIndividus; i++) { ... }Une question d'appellation , qu'est ce que MyAgenda ? peut on parler
d'une classe et quand on l'instancie peut on parler d'un objet.
Avec les versions 1.x, pas vraiment. La version 2 introduit la notion de
classe et d'instanciation, mais elle n'est implémentée que dans les
moteurs ActionScript.
Donc, pour les moteurs JS des clients Web, ce ne sont que des objets
primitifs que l'on copie avec le mot clé "new", d'où la notion générale
de prototypage associée à ce langage (cela fait partie de son paradigme).Merci pour vos réponses,
Matt...
Cordialement,
Pascal
/**Individu**/
var MyIndividu = function()
{
}
MyIndividu.prototype.setNom = function(nom)
{
this.nom = nom;
}
MyIndividu.prototype.getNom = function()
{
return this.nom;
}
/**********/
/**Agenda**/
var MyAgenda = function()
{
}
MyAgenda.prototype.listeIndividu = new Array();
MyAgenda.prototype.setIndividu = function(nom)
{
var newIndividu = new MyIndividu();
newIndividu.setNom(nom);
this.listeIndividu.push(newIndividu);
}
MyAgenda.prototype.getAllIndividu = function()
{
var nbIndividus = this.listeIndividu.length;
for(var i = 0; i < nbIndividus; i++)
alert(this.listeIndividu[i].getNom());
}
/*********/
Voila, merci pour vos remarques.
/**Individu**/
var MyIndividu = function()
{
}
MyIndividu.prototype.setNom = function(nom)
{
this.nom = nom;
}
MyIndividu.prototype.getNom = function()
{
return this.nom;
}
/**********/
/**Agenda**/
var MyAgenda = function()
{
}
MyAgenda.prototype.listeIndividu = new Array();
MyAgenda.prototype.setIndividu = function(nom)
{
var newIndividu = new MyIndividu();
newIndividu.setNom(nom);
this.listeIndividu.push(newIndividu);
}
MyAgenda.prototype.getAllIndividu = function()
{
var nbIndividus = this.listeIndividu.length;
for(var i = 0; i < nbIndividus; i++)
alert(this.listeIndividu[i].getNom());
}
/*********/
Voila, merci pour vos remarques.
/**Individu**/
var MyIndividu = function()
{
}
MyIndividu.prototype.setNom = function(nom)
{
this.nom = nom;
}
MyIndividu.prototype.getNom = function()
{
return this.nom;
}
/**********/
/**Agenda**/
var MyAgenda = function()
{
}
MyAgenda.prototype.listeIndividu = new Array();
MyAgenda.prototype.setIndividu = function(nom)
{
var newIndividu = new MyIndividu();
newIndividu.setNom(nom);
this.listeIndividu.push(newIndividu);
}
MyAgenda.prototype.getAllIndividu = function()
{
var nbIndividus = this.listeIndividu.length;
for(var i = 0; i < nbIndividus; i++)
alert(this.listeIndividu[i].getNom());
}
/*********/
Voila, merci pour vos remarques.
JS est très souple au niveau du passage d'arguments, pas besoin de
s'assurer s'ils ont bien été passés.
Sauf, bien sûr, s'ils sont impliqués dans la construction de l'objet
mais, dans le cas présent, j'utiliserais plutôt un "setter" pour le nom,
donc une méthode genre "setNom(nom)", pour être cohérent avec la méthode
"setIndividu()" définie plus bas.
C'est théoriquement correct, mais là je ne vois pas l'intérêt du
prototypage.
Je n'en connais que deux usages intéressants :
1. Eviter d'encombrer la mémoire dès la création d'un nouvel objet. Pour
une propriété, ça vaut le coup si elle est de type composée, et a
fortiori de type objet, mais pas scalaire comme ici.
2. Modulariser le code, ce qui va de soi pour une méthode, mais pas trop
pour une propriété.
var newIndividu = new MyIndividu(arguments[0]);
this.listeIndividu.push(newIndividu);
}
Pareil que ma première remarque, autant passer un argument nommé à la
méthode "setIndividu(nom)".
// On affiche tout les individus
MyAgenda.prototype.getAllIndividu = function()
{
for(var i = 0; i < this.listeIndividu.length; i++)
this.listeIndividu[i].affiche();
}
Petite astuce au cas où la liste serait importante : la condition de
répétition de la boucle est évaluée avant chaque passage, donc mieux
vaut définir une variable égale au nombre d'éléments à traiter juste
avant la boucle, ce sera plus rapide.
Par exemple :
var nbIndividus = this.listeIndividu.length;
for(var i = 0; i < nbIndividus; i++) { ... }
Avec les versions 1.x, pas vraiment. La version 2 introduit la notion de
classe et d'instanciation, mais elle n'est implémentée que dans les
moteurs ActionScript.
JS est très souple au niveau du passage d'arguments, pas besoin de
s'assurer s'ils ont bien été passés.
Sauf, bien sûr, s'ils sont impliqués dans la construction de l'objet
mais, dans le cas présent, j'utiliserais plutôt un "setter" pour le nom,
donc une méthode genre "setNom(nom)", pour être cohérent avec la méthode
"setIndividu()" définie plus bas.
C'est théoriquement correct, mais là je ne vois pas l'intérêt du
prototypage.
Je n'en connais que deux usages intéressants :
1. Eviter d'encombrer la mémoire dès la création d'un nouvel objet. Pour
une propriété, ça vaut le coup si elle est de type composée, et a
fortiori de type objet, mais pas scalaire comme ici.
2. Modulariser le code, ce qui va de soi pour une méthode, mais pas trop
pour une propriété.
var newIndividu = new MyIndividu(arguments[0]);
this.listeIndividu.push(newIndividu);
}
Pareil que ma première remarque, autant passer un argument nommé à la
méthode "setIndividu(nom)".
// On affiche tout les individus
MyAgenda.prototype.getAllIndividu = function()
{
for(var i = 0; i < this.listeIndividu.length; i++)
this.listeIndividu[i].affiche();
}
Petite astuce au cas où la liste serait importante : la condition de
répétition de la boucle est évaluée avant chaque passage, donc mieux
vaut définir une variable égale au nombre d'éléments à traiter juste
avant la boucle, ce sera plus rapide.
Par exemple :
var nbIndividus = this.listeIndividu.length;
for(var i = 0; i < nbIndividus; i++) { ... }
Avec les versions 1.x, pas vraiment. La version 2 introduit la notion de
classe et d'instanciation, mais elle n'est implémentée que dans les
moteurs ActionScript.
JS est très souple au niveau du passage d'arguments, pas besoin de
s'assurer s'ils ont bien été passés.
Sauf, bien sûr, s'ils sont impliqués dans la construction de l'objet
mais, dans le cas présent, j'utiliserais plutôt un "setter" pour le nom,
donc une méthode genre "setNom(nom)", pour être cohérent avec la méthode
"setIndividu()" définie plus bas.
C'est théoriquement correct, mais là je ne vois pas l'intérêt du
prototypage.
Je n'en connais que deux usages intéressants :
1. Eviter d'encombrer la mémoire dès la création d'un nouvel objet. Pour
une propriété, ça vaut le coup si elle est de type composée, et a
fortiori de type objet, mais pas scalaire comme ici.
2. Modulariser le code, ce qui va de soi pour une méthode, mais pas trop
pour une propriété.
var newIndividu = new MyIndividu(arguments[0]);
this.listeIndividu.push(newIndividu);
}
Pareil que ma première remarque, autant passer un argument nommé à la
méthode "setIndividu(nom)".
// On affiche tout les individus
MyAgenda.prototype.getAllIndividu = function()
{
for(var i = 0; i < this.listeIndividu.length; i++)
this.listeIndividu[i].affiche();
}
Petite astuce au cas où la liste serait importante : la condition de
répétition de la boucle est évaluée avant chaque passage, donc mieux
vaut définir une variable égale au nombre d'éléments à traiter juste
avant la boucle, ce sera plus rapide.
Par exemple :
var nbIndividus = this.listeIndividu.length;
for(var i = 0; i < nbIndividus; i++) { ... }
Avec les versions 1.x, pas vraiment. La version 2 introduit la notion de
classe et d'instanciation, mais elle n'est implémentée que dans les
moteurs ActionScript.
Pascal a écrit :JS est très souple au niveau du passage d'arguments, pas besoin de
s'assurer s'ils ont bien été passés.
Je ne comprends pas cette remarque. this.nom = arguments[0] est
undefined et non pas une chaine, Il assure la cohérence de ses attrib uts.
Sauf, bien sûr, s'ils sont impliqués dans la construction de l'obj et
mais, dans le cas présent, j'utiliserais plutôt un "setter" pour l e
nom, donc une méthode genre "setNom(nom)", pour être cohérent av ec la
méthode "setIndividu()" définie plus bas.
Je ne suis pas fan de ce type de setter. Je préfère utiliser
l'attribut directement, en tant qu'interface de l'objet.
C'est théoriquement correct, mais là je ne vois pas l'intérêt du
prototypage.
Je n'en connais que deux usages intéressants :
1. Eviter d'encombrer la mémoire dès la création d'un nouvel obj et.
Pour une propriété, ça vaut le coup si elle est de type composé e, et a
fortiori de type objet, mais pas scalaire comme ici.
Dans l'absolu, les scalaires n'existent pas en javascript, il n'y a
que des objets ;)
2. Modulariser le code, ce qui va de soi pour une méthode, mais pas
trop pour une propriété.
Tu peux expliquer ?
// On affiche tout les individus
MyAgenda.prototype.getAllIndividu = function()
{
for(var i = 0; i < this.listeIndividu.length; i++)
this.listeIndividu[i].affiche();
}
Petite astuce au cas où la liste serait importante : la condition de
répétition de la boucle est évaluée avant chaque passage, donc mieux
vaut définir une variable égale au nombre d'éléments à trait er juste
avant la boucle, ce sera plus rapide.
Par exemple :
var nbIndividus = this.listeIndividu.length;
for(var i = 0; i < nbIndividus; i++) { ... }
En quoi ce serait plus rapide ? Un Array connais toujours sa taille e n
temps constant. J'aurais plutot parlé de Array.forEach ou Array.map.
Avec les versions 1.x, pas vraiment. La version 2 introduit la notion
de classe et d'instanciation, mais elle n'est implémentée que dans les
moteurs ActionScript.
Il n'y a pas de notion de classe dans Ecmascript, mais uniquement
d'objets. 'fin, pour l'instant. je n'ai pas encore lu la dernière nor me.
Pascal a écrit :
JS est très souple au niveau du passage d'arguments, pas besoin de
s'assurer s'ils ont bien été passés.
Je ne comprends pas cette remarque. this.nom = arguments[0] est
undefined et non pas une chaine, Il assure la cohérence de ses attrib uts.
Sauf, bien sûr, s'ils sont impliqués dans la construction de l'obj et
mais, dans le cas présent, j'utiliserais plutôt un "setter" pour l e
nom, donc une méthode genre "setNom(nom)", pour être cohérent av ec la
méthode "setIndividu()" définie plus bas.
Je ne suis pas fan de ce type de setter. Je préfère utiliser
l'attribut directement, en tant qu'interface de l'objet.
C'est théoriquement correct, mais là je ne vois pas l'intérêt du
prototypage.
Je n'en connais que deux usages intéressants :
1. Eviter d'encombrer la mémoire dès la création d'un nouvel obj et.
Pour une propriété, ça vaut le coup si elle est de type composé e, et a
fortiori de type objet, mais pas scalaire comme ici.
Dans l'absolu, les scalaires n'existent pas en javascript, il n'y a
que des objets ;)
2. Modulariser le code, ce qui va de soi pour une méthode, mais pas
trop pour une propriété.
Tu peux expliquer ?
// On affiche tout les individus
MyAgenda.prototype.getAllIndividu = function()
{
for(var i = 0; i < this.listeIndividu.length; i++)
this.listeIndividu[i].affiche();
}
Petite astuce au cas où la liste serait importante : la condition de
répétition de la boucle est évaluée avant chaque passage, donc mieux
vaut définir une variable égale au nombre d'éléments à trait er juste
avant la boucle, ce sera plus rapide.
Par exemple :
var nbIndividus = this.listeIndividu.length;
for(var i = 0; i < nbIndividus; i++) { ... }
En quoi ce serait plus rapide ? Un Array connais toujours sa taille e n
temps constant. J'aurais plutot parlé de Array.forEach ou Array.map.
Avec les versions 1.x, pas vraiment. La version 2 introduit la notion
de classe et d'instanciation, mais elle n'est implémentée que dans les
moteurs ActionScript.
Il n'y a pas de notion de classe dans Ecmascript, mais uniquement
d'objets. 'fin, pour l'instant. je n'ai pas encore lu la dernière nor me.
Pascal a écrit :JS est très souple au niveau du passage d'arguments, pas besoin de
s'assurer s'ils ont bien été passés.
Je ne comprends pas cette remarque. this.nom = arguments[0] est
undefined et non pas une chaine, Il assure la cohérence de ses attrib uts.
Sauf, bien sûr, s'ils sont impliqués dans la construction de l'obj et
mais, dans le cas présent, j'utiliserais plutôt un "setter" pour l e
nom, donc une méthode genre "setNom(nom)", pour être cohérent av ec la
méthode "setIndividu()" définie plus bas.
Je ne suis pas fan de ce type de setter. Je préfère utiliser
l'attribut directement, en tant qu'interface de l'objet.
C'est théoriquement correct, mais là je ne vois pas l'intérêt du
prototypage.
Je n'en connais que deux usages intéressants :
1. Eviter d'encombrer la mémoire dès la création d'un nouvel obj et.
Pour une propriété, ça vaut le coup si elle est de type composé e, et a
fortiori de type objet, mais pas scalaire comme ici.
Dans l'absolu, les scalaires n'existent pas en javascript, il n'y a
que des objets ;)
2. Modulariser le code, ce qui va de soi pour une méthode, mais pas
trop pour une propriété.
Tu peux expliquer ?
// On affiche tout les individus
MyAgenda.prototype.getAllIndividu = function()
{
for(var i = 0; i < this.listeIndividu.length; i++)
this.listeIndividu[i].affiche();
}
Petite astuce au cas où la liste serait importante : la condition de
répétition de la boucle est évaluée avant chaque passage, donc mieux
vaut définir une variable égale au nombre d'éléments à trait er juste
avant la boucle, ce sera plus rapide.
Par exemple :
var nbIndividus = this.listeIndividu.length;
for(var i = 0; i < nbIndividus; i++) { ... }
En quoi ce serait plus rapide ? Un Array connais toujours sa taille e n
temps constant. J'aurais plutot parlé de Array.forEach ou Array.map.
Avec les versions 1.x, pas vraiment. La version 2 introduit la notion
de classe et d'instanciation, mais elle n'est implémentée que dans les
moteurs ActionScript.
Il n'y a pas de notion de classe dans Ecmascript, mais uniquement
d'objets. 'fin, pour l'instant. je n'ai pas encore lu la dernière nor me.
Dans l'absolu, les scalaires n'existent pas en javascript, il n'y a
que des objets ;)
C'est une légende.
Dans l'absolu, les scalaires n'existent pas en javascript, il n'y a
que des objets ;)
C'est une légende.
Dans l'absolu, les scalaires n'existent pas en javascript, il n'y a
que des objets ;)
C'est une légende.
Bonjour,
C'est un peu la critique pour la critique, je ne suis pas sûr que cela
apporte grand chose à notre ami qui se demandait si son code était bien
construit.
Mais bon, allez, je me prête volontiers au jeu.
Simplement pour préciser que JS ne génère pas d'erreur si, alors qu'une
fonction prévoit un ou plusieurs arguments, on ne lui en passe que
quelques uns, voire aucun.
De ce fait, le tableau "arguments[]" n'est vraiment utile que lorsqu'on
ne peut nommer les arguments et que leur nombre est variable. Mais, dans
ce cas, je trouve plus élégant de passer un seul argument nommé, sous
forme de tableau.
Dans l'absolu, les scalaires n'existent pas en javascript, il n'y a
que des objets ;)
C'est une légende. La preuve :
<script>
var texte_1 = "essai"; // littéral => scalaire
alert(typeof texte_1); // 'string'
texte_1.toUpperCase(); // passage temporaire en objet + méthode
En quoi ce serait plus rapide ? Un Array connais toujours sa taille
en temps constant. J'aurais plutot parlé de Array.forEach ou Array.map.
Comprends pas, l'histoire de "temps constant". Mais il me semble que JS
doive recalculer la taille à chaque fois qu'on lui demande, non ?
Quant à "forEach" et "map", je trouve un peu risquer de les utiliser sur
le Web, ils sont trop récents.
C'est vrai pour ECMAScript, quoique l'édition 4 ait discuté ce point.
Mais une proposition de Netscape, reprise par ActionScript, a remis en
question les notions de classe et de typage fort dans l'hypothétique
version 2.0 de JavaScript.
Voir [http://www.mozilla.org/js/language/evolvingJS.pdf]
C'est bien sûr une tentative de coller à Java, et ça ne plait vraiment
pas à Brendan Eich !
Voir [https://developer.mozilla.org/presentations/xtech2006/javascript/]
Bonjour,
C'est un peu la critique pour la critique, je ne suis pas sûr que cela
apporte grand chose à notre ami qui se demandait si son code était bien
construit.
Mais bon, allez, je me prête volontiers au jeu.
Simplement pour préciser que JS ne génère pas d'erreur si, alors qu'une
fonction prévoit un ou plusieurs arguments, on ne lui en passe que
quelques uns, voire aucun.
De ce fait, le tableau "arguments[]" n'est vraiment utile que lorsqu'on
ne peut nommer les arguments et que leur nombre est variable. Mais, dans
ce cas, je trouve plus élégant de passer un seul argument nommé, sous
forme de tableau.
Dans l'absolu, les scalaires n'existent pas en javascript, il n'y a
que des objets ;)
C'est une légende. La preuve :
<script>
var texte_1 = "essai"; // littéral => scalaire
alert(typeof texte_1); // 'string'
texte_1.toUpperCase(); // passage temporaire en objet + méthode
En quoi ce serait plus rapide ? Un Array connais toujours sa taille
en temps constant. J'aurais plutot parlé de Array.forEach ou Array.map.
Comprends pas, l'histoire de "temps constant". Mais il me semble que JS
doive recalculer la taille à chaque fois qu'on lui demande, non ?
Quant à "forEach" et "map", je trouve un peu risquer de les utiliser sur
le Web, ils sont trop récents.
C'est vrai pour ECMAScript, quoique l'édition 4 ait discuté ce point.
Mais une proposition de Netscape, reprise par ActionScript, a remis en
question les notions de classe et de typage fort dans l'hypothétique
version 2.0 de JavaScript.
Voir [http://www.mozilla.org/js/language/evolvingJS.pdf]
C'est bien sûr une tentative de coller à Java, et ça ne plait vraiment
pas à Brendan Eich !
Voir [https://developer.mozilla.org/presentations/xtech2006/javascript/]
Bonjour,
C'est un peu la critique pour la critique, je ne suis pas sûr que cela
apporte grand chose à notre ami qui se demandait si son code était bien
construit.
Mais bon, allez, je me prête volontiers au jeu.
Simplement pour préciser que JS ne génère pas d'erreur si, alors qu'une
fonction prévoit un ou plusieurs arguments, on ne lui en passe que
quelques uns, voire aucun.
De ce fait, le tableau "arguments[]" n'est vraiment utile que lorsqu'on
ne peut nommer les arguments et que leur nombre est variable. Mais, dans
ce cas, je trouve plus élégant de passer un seul argument nommé, sous
forme de tableau.
Dans l'absolu, les scalaires n'existent pas en javascript, il n'y a
que des objets ;)
C'est une légende. La preuve :
<script>
var texte_1 = "essai"; // littéral => scalaire
alert(typeof texte_1); // 'string'
texte_1.toUpperCase(); // passage temporaire en objet + méthode
En quoi ce serait plus rapide ? Un Array connais toujours sa taille
en temps constant. J'aurais plutot parlé de Array.forEach ou Array.map.
Comprends pas, l'histoire de "temps constant". Mais il me semble que JS
doive recalculer la taille à chaque fois qu'on lui demande, non ?
Quant à "forEach" et "map", je trouve un peu risquer de les utiliser sur
le Web, ils sont trop récents.
C'est vrai pour ECMAScript, quoique l'édition 4 ait discuté ce point.
Mais une proposition de Netscape, reprise par ActionScript, a remis en
question les notions de classe et de typage fort dans l'hypothétique
version 2.0 de JavaScript.
Voir [http://www.mozilla.org/js/language/evolvingJS.pdf]
C'est bien sûr une tentative de coller à Java, et ça ne plait vraiment
pas à Brendan Eich !
Voir [https://developer.mozilla.org/presentations/xtech2006/javascript/]
Bonjour,
Quelle est la meilleur façon de créer un objet :
function MyObjet()
{
this.myPropriete = 0;
this.MyMethode = function(arg)
{
alert(arg);
}
}
ou alors
function MyObjet()
{
this.myPropriete = 0;
}
MyObjet.prototype.MyMethode = function(arg)
{
this.myPropriete += arg;
alert(myPropriete);
}
Dans le deuxième cas, on ne peut ni avoir de méthode, ni de propriété
privés, tout est public.
Merci pour vos réponses,
Matt...
Bonjour,
Quelle est la meilleur façon de créer un objet :
function MyObjet()
{
this.myPropriete = 0;
this.MyMethode = function(arg)
{
alert(arg);
}
}
ou alors
function MyObjet()
{
this.myPropriete = 0;
}
MyObjet.prototype.MyMethode = function(arg)
{
this.myPropriete += arg;
alert(myPropriete);
}
Dans le deuxième cas, on ne peut ni avoir de méthode, ni de propriété
privés, tout est public.
Merci pour vos réponses,
Matt...
Bonjour,
Quelle est la meilleur façon de créer un objet :
function MyObjet()
{
this.myPropriete = 0;
this.MyMethode = function(arg)
{
alert(arg);
}
}
ou alors
function MyObjet()
{
this.myPropriete = 0;
}
MyObjet.prototype.MyMethode = function(arg)
{
this.myPropriete += arg;
alert(myPropriete);
}
Dans le deuxième cas, on ne peut ni avoir de méthode, ni de propriété
privés, tout est public.
Merci pour vos réponses,
Matt...
La premiere methode, celle qui consiste a associer les methode a l'objet via
this offre un avantage certain.
Celui de l'heritage...
Avec le prototypage.
pas d'héritage possible (en tout cas moi j'ai pas trouvé !!!)
La premiere methode, celle qui consiste a associer les methode a l'objet via
this offre un avantage certain.
Celui de l'heritage...
Avec le prototypage.
pas d'héritage possible (en tout cas moi j'ai pas trouvé !!!)
La premiere methode, celle qui consiste a associer les methode a l'objet via
this offre un avantage certain.
Celui de l'heritage...
Avec le prototypage.
pas d'héritage possible (en tout cas moi j'ai pas trouvé !!!)