JavaScript의 프로토타입 디자인 패턴은 처음부터 객체를 생성하는 대신 기존 객체("프로토타입")를 복제하여 새 객체를 생성할 수 있는 생성 패턴입니다. 프로토타입. 이 패턴은 JavaScript 자체가 프로토타입 기반 언어이고 객체 생성 비용이 많이 들거나 기본 프로토타입과 특정 속성을 공유하는 객체를 생성하려는 경우에 유용하므로 JavaScript에 특히 적합합니다.
ES6 클래스를 사용하면 객체의 구조를 더 쉽게 이해할 수 있습니다. 확장을 사용하면 상속이 단순화되지만 ES6 이전에는 프로토타입을 사용하여 이를 상속하고 구현했습니다. 이 개념을 이해하기 위한 블로그가 있습니다.
Ps: JavaScript의 프로토타입 디자인 패턴에는 다른 언어(예: Java)에 있는 것처럼 내장 clone() 메서드가 없습니다. 그러나 프로토타입이나 생성자 함수에서 clone() 메서드를 수동으로 구현하여 유사한 기능을 제공할 수 있습니다.
프로토타입 패턴의 기본 아이디어는 다음과 같습니다.
프로토타입: 새 개체가 생성되는 템플릿 개체입니다.
복제: 프로토타입을 복사하여 새로운 객체를 생성합니다.
프로토타입 체인: 객체는 프로토타입에 동작을 위임할 수 있습니다
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 } }
설명:
목적: Shape 클래스는 원이나 직사각형과 같은 특정 모양이 상속될 수 있는 기본 클래스 또는 "프로토타입" 역할을 합니다.
clone() 메서드: 이는 프로토타입 패턴의 핵심 부분입니다. 클래스의 새 인스턴스를 처음부터 만드는 대신 기존 인스턴스(또는 "프로토타입")의 복제본을 만듭니다. 이 경우 Object.create(this)는 원래 Shape와 동일한 프로토타입을 공유하는 새 객체를 생성합니다.
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; } }
설명:
목적: Circle 클래스는 Shape 클래스를 확장하고 특정 유형의 모양을 나타냅니다.
속성:
getArea() 메서드: π * 반경^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; } }
설명:
목적: Rectangle 클래스는 Shape 클래스를 확장하고 또 다른 특정 유형의 모양(사각형)을 나타냅니다.
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';
설명:
여기에서는 new 키워드를 사용하여 처음부터 myCircle 및 myRectangle 객체를 생성하는 대신 프로토타입을 복제합니다.
복제 프로세스:
복제된 인스턴스 수정:
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
설명:
프로토타입 패턴은 다음과 같은 경우에 유용합니다.
여기까지 오셨다면 ?✨ 질문이나 생각이 있으시면 아래에 댓글을 남겨주세요. 여러분의 의견을 듣고 좋은 토론에 참여하고 싶습니다!✨
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3