
프로토타입을 알아보기 전에 JavaScript의 특징에 대해서 먼저 확인할 필요가 있다.
자바스크립트는 객체지향언어이기 때문에 클래스의 개념이 없다.
ES6 문법부터 class문법이 추가되긴 했지만, 그렇다고 자바스크립트가 클래스 기반 언어가 된 것은 아니다.
그렇기때문에 클래스 대신 프로토타입 기반으로 이루어져 있다.
JavaScript에서 상속을 하기 위한 매커니즘

위의 사진처럼 함수가 정의되고 나면, 함수객체와 Prototype Object가 생성된다.
Prototype Object는 생성된 함수를 가리키는 constructor와 __proto__ 속성을 가지고 있다.
그리고 생성된 함수 Person은 Prototype Object를 가리키는 Prototype 속성을 가지고 있다.
이렇게 되므로써 Person.prototype을 통해 Prototype Object을 참조할 수 있게 된다.
__proto____proto__ 속성은 모든 객체에 포함되어 있다.
__proto__를 통해 객체가 생성될 때 조상노드였던 함수의 Prototype Object를 가리킨다.
그렇기때문에 kim에는 eyes나 nose라는 메소드가 없는데도, __proto__를 통해 조상노드 즉 Person의 Prototype Object에 접근하기 때문에, 해당 메소드를 사용할 수 있게 된다.
이처럼 인스턴스에서 거슬러 올라가 클래스나 함수의 Prototype Object에 접근하는 것을 Prototype Chain이라고 한다.