Das Prototype Design Pattern in JavaScript ist ein Erstellungsmuster, mit dem Sie neue Objekte erstellen können, indem Sie ein vorhandenes Objekt (den „Prototyp“) klonen, anstatt sie von Grund auf neu zu erstellen ein Prototyp. Dieses Muster eignet sich besonders gut für JavaScript, da JavaScript selbst eine prototypbasierte Sprache ist und nützlich ist, wenn die Objekterstellung kostspielig ist oder wenn Sie ein Objekt erstellen möchten, das bestimmte Eigenschaften mit einem Basisprototyp teilt.
ES6-Klassen erleichtern das Verständnis der Struktur von Objekten. Die Verwendung von Extends vereinfacht die Vererbung, aber vor ES6 wurde Prototyp verwendet, um dies zu vererben und zu implementieren. Hier ist ein Blog, um dieses Konzept zu verstehen.
Ps: Im Prototype Design Pattern in JavaScript gibt es keine integrierte clone()-Methode wie in einigen anderen Sprachen (z. B. Java). Sie können jedoch manuell eine clone()-Methode in Ihrem Prototyp oder Ihrer Konstruktorfunktion implementieren, um eine ähnliche Funktionalität bereitzustellen.
Die Idee hinter dem Prototype-Muster ist:
Prototyp: Ein Vorlagenobjekt, aus dem neue Objekte erstellt werden.
Klonen: Neue Objekte werden durch Kopieren des Prototyps erstellt.
Prototypenkette: Objekte können Verhalten an ihren Prototyp delegieren
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 } }
Erläuterung:
Zweck: Die Shape-Klasse fungiert als Basisklasse oder „Prototyp“, von dem bestimmte Formen wie Kreise oder Rechtecke erben können.
clone()-Methode: Dies ist ein wichtiger Teil des Prototypmusters. Anstatt eine neue Instanz einer Klasse von Grund auf zu erstellen, erstellen wir einen Klon der vorhandenen Instanz (oder „Prototyp“). In diesem Fall erstellt Object.create(this) ein neues Objekt, das denselben Prototyp wie die ursprüngliche Form hat.
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; } }
Erläuterung:
Zweck: Die Circle-Klasse erweitert die Shape-Klasse und stellt einen bestimmten Formtyp dar.
Attribute:
getArea() Methode: Berechnet die Fläche des Kreises mithilfe der Formel π * Radius^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; } }
Erläuterung:
Zweck: Die Klasse „Rechteck“ erweitert die Klasse „Form“ und stellt einen anderen spezifischen Formtyp dar (ein Rechteck).
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';
Erläuterung:
Anstatt myCircle- und myRectangle-Objekte mit dem neuen Schlüsselwort von Grund auf zu erstellen, klonen wir hier Prototypen.
Klonvorgang:
Geklonte Instanzen ändern:
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
Erläuterung:
Das Prototype-Muster ist nützlich, wenn:
Wenn Sie es bis hierher geschafft haben ?✨, hinterlassen Sie unten einen Kommentar mit Fragen oder Gedanken. Ich würde gerne von Ihnen hören und mich an tollen Diskussionen beteiligen!✨
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3