Les classes en JS #
ES2015 classes en JavaScript sont juste sucre syntaxiqueils n’existent pas vraiment
existent pas vraiment.
Des classes ont été ajoutées à faciliter le travail avec l’héritage pour
programmeurs qui étaient habitués à travailler avec des classes avec l’approche traditionnelle de la POO
traditionnelle.
Lorsque nous utilisons un Classe ES2015il suffit de utilise le système prototype derrière
les coulisses – même si nous utilisons la syntaxe de classe, nous utilisons toujours l’héritage
l’héritage prototypique.
Disons que nous avons la classe suivante :
class Employee {
constructor(title) {
this.title = title;
}
work() {
console.log(`The ${this.title} is working.`);
}
}
Le code réel qui sera exécuté sera la fonction constructeur suivante :
function Employee(title) {
this.title = title;
}
Employee.prototype.work = function () {
console.log(`The ${this.title} is working.`);
};
Nous pourrions ensuite utiliser cette fonction constructrice pour initialiser/utiliser les différentes
propriétés/méthodes que nous voulons qu’un employé ait :
const employee = new Employee('programmer');
employee.work();
Propriété prototype #
A l’intérieur de la fonction constructeur, nous n’associons généralement que les propriétés
que nous voulons qu’un objet ait, parce que les propriétés seront le plus souvent
uniques entre les différentes instances que nous créons.
Quand il s’agit de méthodes, nous les plaçons dans la section prototype
parce que les
car les méthodes sont le plus souvent les mêmes entre les instances, et ce serait un
ressources de dupliquer ces méthodes sur chaque instance que nous créons.
La solution utilisée dans le langage javascript est de déléguer les méthodes à l’instance de l’utilisateur.
prototype
objet.
Si vous deviez console.log
le site employee
instance que nous avons créée ci-dessus, vous
vous verriez quelque chose comme :
{
title: 'programmer',
__proto__: {
work: () => {},
...
}
}
Donc nous ne voyons pas le prototype
sur l’instance mais nous voyons une
__proto__
qui a accès à la propriété work
méthode.
Alors comment __proto__
est lié à prototype
?
-
__proto__
est l’objet réel qui est utilisé dans la chaîne de recherche pour résoudre les
méthodes. Lorsque nous essayons d’accéder à une méthode commework
directement sur l’instance
employee
– javascript recherche d’abord lework
directement sur l’instance
et, s’il ne la trouve pas, il recherche la méthodework
sur l’instance
__proto__
objet. -
prototype
est l’objet qui est utilisé pour construire__proto__
lorsque nous créons un objet
avec l’objetnew
mot-clé. Nous avons assigné lework
à la méthode
prototype
qui est ensuite utilisée pour construire__proto__
qui est utilisé par
les instances pour rechercher des méthodes, lorsqu’elles ne sont pas trouvées directement sur l’instance.
l’instance.
Un autre avantage de cette approche de délégation est que l’on peut attacher des méthodes à l’élément
prototype
de la classe après avoir créé une instance, et toujours utiliser cette méthode sur l’instance.
sur l’instance – parce que javascript va d’abord chercher la méthode sur l’instance et
méthode sur l’instance et s’il ne la trouve pas, il cherchera sur le
prototype.
function Employee(title) {
this.title = title;
}
Employee.prototype.work = function () {
console.log(`The ${this.title} is working.`);
};
const employee = new Employee('programmer');
Employee.prototype.drinkCoffee = function () {
console.log(`The ${this.title} drinks coffee`);
};
employee.drinkCoffee();
Nous pouvons revenir sur un prototype et ajouter, mettre à jour ou supprimer des méthodes, et ensuite
elles seront répercutées sur toutes les instances créées à partir de cette fonction constructeur
fonction.
Résumé #
Lorsque l’on utilise des classes en javascript, on utilise toujours l’attribut prototype
chaque classe
classe se traduit par une fonction de construction avec un prototype qui stocke toutes les
différentes méthodes associées à la classe.