prototype은 클래스, 객체의 내용 복사 없이도 상속을 구현할 수 있게 해주는 방법이다.
그래서 prototype은 상속보다는 '연결'이다.
내가 이해한 프로토타입 체인은 객체와 연결된 상위 객체의 속성을 상향 탐색하는 과정이다.
아래 예시들을 살펴보자.
ethan 객체안에 sayHi라는 메서드가 없기 때문에 에러가 뜬다.
Person 클래스에 메서드를 넣지않고 prototype객체에 메서드를 넣었는데 ethan객체에서 해당 메서드를 호출할 수 있다.
이는 프로토타입 체이닝이 일어났기 때문이다.
어떻게 보면 위의 결과는 ethan 이라는 객체에 할당된 sayHi라는 함수를 호출하는 것으로 보이지만,
ethan 객체를 거슬러 Person 함수의 prototype 객체로 이동해서 sayHi 함수를 찾아서 호출한 것이다.
만약 최상위(object's prototype)까지 메서드를 찾지 못하게되면, undefined를 리턴한다.
연결된 프로토타입을 확인하는 방법 (_ _ proto __)