Le modèle de conception de prototype en JavaScript est un modèle de création qui vous permet de créer de nouveaux objets en clonant un objet existant (le « prototype ») au lieu de les créer à partir de zéro, ce qui sert de un prototype. Ce modèle est particulièrement bien adapté à JavaScript, car JavaScript lui-même est un langage basé sur un prototype et est utile lorsque la création d'objets est coûteuse ou lorsque vous souhaitez créer un objet partageant certaines propriétés avec un prototype de base.
Les classes ES6 facilitent la compréhension de la structure des objets. L'utilisation d' extends simplifie l'héritage, mais avant ES6, un prototype était utilisé pour hériter et l'implémenter. Voici un blog pour comprendre ce concept.
Ps : dans le modèle de conception de prototype en JavaScript, il n'y a pas de méthode clone() intégrée comme c'est le cas dans certains autres langages (par exemple Java). Cependant, vous pouvez implémenter manuellement une méthode clone() dans votre prototype ou votre fonction constructeur pour fournir des fonctionnalités similaires.
L'idée derrière le modèle Prototype est de :
Prototype : un objet modèle à partir duquel de nouveaux objets sont créés.
Clonage : de nouveaux objets sont créés en copiant le prototype.
Chaîne de prototypes : les objets peuvent déléguer un comportement à leur prototype
class Shape { constructor(type = 'Generic Shape', color = 'White') { this.type = type; this.color = color; } getDetails() { return `Type: ${this.type}, Color: ${this.color}`; } // Clone method to create a new object with the same prototype clone() { return Object.create(this); // Creates a new object that inherits from this prototype } }
Explication:
Objectif : la classe Shape agit comme une classe de base ou un "prototype" dont des formes spécifiques telles que des cercles ou des rectangles peuvent hériter.
Méthodeclone() : il s’agit d’un élément clé du modèle de prototype. Au lieu de créer une nouvelle instance d'une classe à partir de zéro, nous créons un clone de l'instance existante (ou « prototype »). Dans ce cas, Object.create(this) crée un nouvel objet qui partage le même prototype que la forme d'origine.
class Circle extends Shape { constructor(radius = 0, color = 'White') { super('Circle', color); // Calls the parent (Shape) constructor this.radius = radius; } getArea() { return Math.PI * this.radius * this.radius; } }
Explication:
Objectif : La classe Circle étend la classe Shape et représente un type spécifique de forme.
Attributs :
getArea() : Ceci calcule l'aire du cercle à l'aide de la formule π * rayon^2.
class Rectangle extends Shape { constructor(width = 0, height = 0, color = 'White') { super('Rectangle', color); // Calls the parent (Shape) constructor this.width = width; this.height = height; } getArea() { return this.width * this.height; } }
Explication:
Objectif : La classe Rectangle étend la classe Shape et représente un autre type spécifique de forme (un rectangle).
const circlePrototype = new Circle(); // Create prototype const myCircle = circlePrototype.clone(); // Clone the prototype myCircle.radius = 5; myCircle.color = 'Red'; const rectanglePrototype = new Rectangle(); // Create prototype const myRectangle = rectanglePrototype.clone(); // Clone the prototype myRectangle.width = 10; myRectangle.height = 5; myRectangle.color = 'Blue';
Explication:
Ici, au lieu de créer des objets myCircle et myRectangle à partir de zéro à l'aide du nouveau mot-clé, nous clonons des prototypes.
Processus de clonage :
Modification des instances clonées :
console.log(myCircle.getDetails()); // Output: Type: Circle, Color: Red console.log(`Circle Area: ${myCircle.getArea()}`); // Output: Circle Area: 78.54 console.log(myRectangle.getDetails()); // Output: Type: Rectangle, Color: Blue console.log(`Rectangle Area: ${myRectangle.getArea()}`); // Output: Rectangle Area: 50
Explication:
Le modèle Prototype est utile lorsque :
Si vous êtes arrivé jusqu'ici ?✨, déposez un commentaire ci-dessous avec des questions ou des réflexions. J'aimerais avoir de vos nouvelles et participer à de bonnes discussions !✨
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3