웹프로그래밍 기초 천인국 지음
참고하여 작성하였습니다.

프로토타입

하나의 객체가 가지고 있는 속성과 메서드는 다른 객체가 전혀 이용할 수 없었음
물론 이런 방법도 유영하나 속성이나 메서드를 여러 객체가 공유하는 것이 필요함 

객체는 자신만의 데이터를 가져야 하지만 메서드는 가급적 서로 공유하는 편이 좋음 
객체 사이에서 메서드를 공유하는 방법은 없을까?

타 객체 지향 언어에서는 클래스라는 개념이 제공됨 
클래스는 객체에 대한 설계도 
객체는 클래스로부터 찍어낼 수 있음 

클래스로부터 객체를 찍어내면 객체는 자기만의 데이터를 갖게 되지만 메서드는 클래스에 정의된 메서드를 서로 공유 

자바스크립트에서는 클래스라는 개념을 프로토타입이라는 개념으로 제공함
(ES6 이전 내용 같으나 이해해보려고 노력해보겠음 ㅎㅎ)
클래스가 메서드를 소유하게 하려면 어떻게 해야 하는가?
자바스크립트의 모든 객체는 프로토타입이라는 숨겨진 객체를 가지고 있으며 이 객체를 이용해 공유되는 메서드를 작성함 


예) 

자바스크립트로 게임을 제작함 
점을 나타내는 객체가 필요하게 되어서 다음과 같이 생성자 함수를 정의
funtion Point(xposition, yposition) {
    this.x= xposition;
    this.y= yposition;
    this.getDistance = function(){
            return Math.sqrt(this.x * this.y +this.y* this.y);
    };

  }

  let p1 = new Point(30, 40);
  let p2 = new Point(30, 50);

프로토타입을 이용해 공유되는 메서드를 다시 정의한다면

function Point(xposition, yposition) {
    this.x= xposition;
    this.y= yposition; }
    Point.prototype.getDistance = function(){
            return Math.sqrt(this.x * this.y +this.y* this.y);
     };

 Point.prototype 이라는 숨겨진 객체가 있으며 여기에 getDistance()를 정의해 두면 Point 객체는 모두 getDistance() 메서드를 공유할 수 있음 

 getDistance() 메서드는 특정한 객체 안에 정의되는 것이 아니라 prototype 객체 안에 정의됨 
 객체를 아무리 많이 생성하더라도 getDistance()메서드는 하나만 존재