프로토타입이란 클래스나 객체의 내용 복사 없이도 상속의 효과를 구현할 수 있게 해주는 방법
JavaScript의 모든 객체는 자신의 부모 객체의 프로토타입 객체
([[Prototype]])와 연결되어 있으며, 이를 통해 부모 객체의 속성과 메소드를 상속받아 사용할 수 있게 한다.
[[Prototype]]의 값은 null 또는 객체이며, 상속을 구현하는 데 사용된다.
[[Prototype]] 객체는 부모 객체의 속성과 메소드를 상속받아 자식 객체가 사용할 수 있도록 한다.
이때 자식 객체의 __proto__ 속성은 자신의 부모 객체의 프로토타입 객체를 가리킨다.
함수를 정의했다면 함수라는 객체가 생성되고 또한 함수의 프로토타입 객체가 생긴다. 이 두개는 서로 연관되어 있고 Person이라는 객체에 프로토타입이라는 프로퍼티가 생기고 이 프로퍼티는 프로토타입 객체를 가리킨다.
person's Prototype도 constructor라는 프로퍼티를 통해서 person이랑 연관되어 있다는 것을 알려준다.
이제 new로 객체를 생성한다면 __proto__를 통해서 prototype에 접근할 수 있다.
생성자로 만들어진 객체에서 해당 객체에 없는 함수를 호출할때 객체 프로퍼티 proto를통해서 부모 prototype 객체에서 메소드를 찾아 호출합니다. 그러므로 부모에서 prototype 프로퍼티는 따로 prototype객체를 두어 바로 자식 객체에서 호출할때 부를수 있도록 만들고 자식 proto 경우는 부모 prototype으로 연결하여 부모 프로퍼티, 메소드를 호출할수 있도록합니다.