Bonjour à tous
Je suis en train de modifier certains de mes fichiers JavaScript pour les mettre "à la mode".
Je tombe sur le point suivant pour lequel j'aimerais vos recommandations.
Soit une définition de classe d'objet "à l'ancienne"
Comme addEventListener référence la méthode this.display, je mets l'initialisation de la propriété this.figure après la définition de la méthode.
Si je veux transformer ce code en définition de classe JavaScript, j'écris le code suivant
Si je le mets dans constructor il référence une méthode qui n'est pas encore définie.
J'ai cru comprendre que les méthodes (contrairement aux fonctions en dehors de la définition de classe) n'étaient pas "remontées" (hoisted).
ou bien peut-on définir la classe de la façon suivante, en mettant le constructeur à la fin ?
Comment dois-je traiter ce problème ?
Modifié par PapyJP (23 Jul 2022 - 17:57)
Je suis en train de modifier certains de mes fichiers JavaScript pour les mettre "à la mode".
Je tombe sur le point suivant pour lequel j'aimerais vos recommandations.
Soit une définition de classe d'objet "à l'ancienne"
function Photo(data) {
for(let property in data) this[property] = data[property];
this.display = function(event) {
event.stopPropagation();
......
}
this.figure = document.createElement(...);
....
this.figure.addEventListener('click', this.display.bind(this));
}
Comme addEventListener référence la méthode this.display, je mets l'initialisation de la propriété this.figure après la définition de la méthode.
Si je veux transformer ce code en définition de classe JavaScript, j'écris le code suivant
class Photo {
constructor(data) {
for(let property in data) this[property] = data[property];
}
display(event) {
event.stopPropagation();
......
}
/* que dois-je faire pour ce code ?
this.figure = document.createElement(...);
....
this.figure.addEventListener('click', this.display.bind(this));
*/
}
Si je le mets dans constructor il référence une méthode qui n'est pas encore définie.
J'ai cru comprendre que les méthodes (contrairement aux fonctions en dehors de la définition de classe) n'étaient pas "remontées" (hoisted).
ou bien peut-on définir la classe de la façon suivante, en mettant le constructeur à la fin ?
class Photo {
display(event) {
event.stopPropagation();
......
}
constructor(data) {
for(let property in data) this[property] = data[property];
this.figure = document.createElement(...);
....
this.figure.addEventListener('click', this.display.bind(this));
}
}
Comment dois-je traiter ce problème ?
Modifié par PapyJP (23 Jul 2022 - 17:57)