Hello,
PapyJP a écrit :
Bonjour à tous
J’ai actuellement des objets très similaires et la seule façon que j’ai trouvée pour les gérer est d’utiliser une seule classe d’objets avec des switch ou des if pour distinguer les variantes.
Je sais bien que ES6+ ne fait pas à proprement parler des classes de JS de véritables classes d’objets. J’aimerais savoir s’il y a néanmoins un moyen de simuler l’héritage.
C'est nouveau ça
Depuis l'ES6, c'est de l'objet. Avant, c'était du prototype (d'où les ambiguïtés de ce type « d'objet »)
class MotherClass{
#privateAttribute;
_protectedAttribute;
publicAttribute;
constructor(valPublicAttribute, valProtectedAttribute, valPrivateAttribute){
this.publicAttribute = valPublicAttribute;
this._protectedAttribute = valProtectedAttribute;
this.#privateAttribute = valPrivateAttribute;
}
get privateAttribute(){
return this.#privateAttribute;
}
get protectedAttribute(){
return this.protectedAttribute;
}
motherMethod(val){
return val * val;
}
}
class DaughterClass extends MotherClass{
constructor(one, two, three){
super(one, two, three);
}
daughterMethod(val){
return val + val;
}
#privateDaughterMethod(){
return "Je ne peux pas m'exécuter en dehors de cette class";
}
static dauhterMethodStatic(){
return "Je suis une méthod static. Pour m'exécuter, il faut faire : DaughterClass.daughterMethodStatic()";
}
_protectedMethod(){
return "méthode protégée";
}
motherMethod(val){
// surcharge la méthode
return val - 1;
}
}
let oneInstance = new DaughterClass('a', 'b', 'c');
Tu remarqueras le dièse devant un attribut et une méthode. C'est tout à fait valide en JS depuis ES2021 (de mémoire).
Pour le caractère souligné pour attribut et method, c'est valide mais ce n'est pas officiellement dans les specs de l'ecmascript. C'est simplement une de mes conventions d'écriture.
Modifié par Niuxe (28 Jul 2025 - 16:12)