Niveau classe vs Niveau instance
Fait partie de la section Programmation Orientée Objet du Journey JavaScript de Coddy — leçon 31 sur 56.
Dans les classes JavaScript, il existe deux niveaux distincts de propriétés et de méthodes :
- Niveau instance : Propriétés et méthodes qui appartiennent à chaque objet individuel créé à partir de la classe.
- Niveau classe : Propriétés et méthodes qui appartiennent à la classe elle-même, et non aux instances.
Comprenons la différence :
Tout d'abord, examinons les membres au niveau de l'instance. Créez une classe standard avec une méthode d'instance :
class Car {
constructor(make) {
this.make = make;
}
drive() {
return `The ${this.make} is driving`;
}
}Créez une instance de la classe Car :
const myCar = new Car("Toyota");Appelez la méthode d'instance :
console.log(myCar.drive()); // Affiche : "The Toyota is driving"Remarquez que chaque instance reçoit sa propre copie de la méthode drive et peut accéder à ses propres propriétés en utilisant this.
Maintenant, examinons les membres au niveau de la classe. Nous ajoutons une méthode statique à notre classe. Utilisez le mot-clé static devant le nom de la méthode pour créer une méthode qui appartient à la classe elle-même, et non aux instances.
class Car {
constructor(make) {
this.make = make;
}
drive() {
return `The ${this.make} is driving`;
}
static compareModels(car1, car2) {
return `Comparing ${car1.make} with ${car2.make}`;
}
}Les méthodes statiques sont utiles pour les fonctions utilitaires qui ne dépendent pas de données d'instance spécifiques. La méthode statique est appelée sur la classe elle-même, et non sur les instances :
const car1 = new Car("Toyota");
const car2 = new Car("Honda");
console.log(Car.compareModels(car1, car2)); // Affiche : "Comparing Toyota with Honda"Tenter d'appeler une méthode statique sur une instance entraînera une erreur :
car1.compareModels(car1, car2); // Erreur : car1.compareModels n'est pas une fonctionDéfi
On vous donne une classe Calculator avec seulement un constructeur. Votre tâche consiste à ajouter deux méthodes :
1. Méthode d'instance <strong>add(number)</strong>
- Ajoute le nombre donné à la valeur actuelle de la calculatrice
Met à jour
this.valueet retourne la nouvelle valeur*Elle est appelée sur les instances de la calculatrice :
calc.add(3)
2. Méthode statique <strong>multiply(num1, num2)</strong>
- Prend deux nombres et retourne leur produit
N'utilise PAS
this(les méthodes statiques n'ont pas de données d'instance)*Elle est appelée sur la classe Calculator elle-même :
Calculator.multiply(4, 6)
Aide-mémoire
Les classes JavaScript ont deux niveaux de propriétés et de méthodes :
- Niveau instance : Appartiennent à chaque objet individuel créé à partir de la classe
- Niveau classe : Appartiennent à la classe elle-même, pas aux instances
Méthodes d'instance :
Méthodes régulières qui peuvent accéder aux propriétés d'instance en utilisant this :
class Car {
constructor(make) {
this.make = make;
}
drive() {
return `The ${this.make} is driving`;
}
}
const myCar = new Car("Toyota");
console.log(myCar.drive()); // "The Toyota is driving"Méthodes statiques :
Utilisez le mot-clé static pour créer des méthodes qui appartiennent à la classe elle-même. Elles sont appelées sur la classe, et non sur les instances :
class Car {
static compareModels(car1, car2) {
return `Comparing ${car1.make} with ${car2.make}`;
}
}
const car1 = new Car("Toyota");
const car2 = new Car("Honda");
// Appel sur la classe elle-même
console.log(Car.compareModels(car1, car2)); // "Comparing Toyota with Honda"
// L'appel sur une instance provoque une erreur
car1.compareModels(car1, car2); // Error: car1.compareModels is not a functionLes méthodes statiques sont utiles pour les fonctions utilitaires qui ne dépendent pas de données d'instance spécifiques.
Essayez vous-même
import { Calculator } from './calculator.js';
// Ne modifiez pas le code ci-dessous
const calc = new Calculator(5); // Crée une calculatrice avec la valeur = 5
const result1 = calc.add(3); // Devrait ajouter 3 → 5 + 3 = 8
const result2 = Calculator.multiply(4, 6); // Devrait multiplier 4 × 6 = 24
console.log(result1); // Attendu : 8
console.log(result2); // Attendu : 24Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation Orientée Objet
1Objets et le mot-clé this
Révision rapide : Les objetsAjouter des méthodes aux objetsComprendre le mot-clé thisFonctions constructeursLe mot-clé newDéfi récapitulatif7L'héritage et le mot-clé extends
L'héritageLa relation « est un »Le mot-clé extendsLa méthode super()Hériter des propriétés et méthodesDéfi récapitulatif10Polymorphisme
Qu'est-ce que le polymorphisme ?Redéfinition de méthodes héritéesUtiliser superDéfi récapitulatif13Composition vs Héritage
Les relations « has-a » vs « is-a »Les limites de l'héritage profondConstruction d'objets2Organisation du code
Qu'est-ce qu'un module ?Exporter avec exportImporter avec importExports par défaut vs nommés5Encapsulation & Accès
EncapsulationChamps de classe publics et privésMéthodes privéesDéfi récapitulatif8Organisation du code POO
Organiser les classes en modules11Projet : Un moteur de rendu de formes
Configuration : Classe Shape et ExportationHéritage de la classe Circle14Système de gestion de bibliothèque
Conception de la bibliothèqueClasse Book avec composition3Classes et Objets
Qu'est-ce qu'une classe ?Créer des instancesPropriétés et méthodesDéfi récapitulatif9Méthodes et propriétés statiques
Niveau classe vs Niveau instancePropriétés statiquesMéthodes utilitaires statiquesDéfi récapitulatif