Constructior(생산자)에 new 연산자를 이용해서 instance를 만든다.
이 instance는 생산자의 prototype라고 하는 프로퍼티의 내용이 _ _ proto _ _ 의 프로퍼티로 참조를 전달하게 된다.
이것을 이미화한것이 아래의 이미지이다.
여기서 instance의 proto는 생략이 가능하다.
그럼 여기서 예시를 하나 들면서 이해를 깊게 들어가보자.
Constructor는 Array라고 하고 instance는 [1, 2, 3]이라는 값을 넣어서 비교를 할 수 있다. 콘솔에 console.dir([1, 2, 3])을 넣고 출력하면 아래의 이미지처럼 나온다.
Array를 열고 proto를 열어보니 많은 Array의 prototype의 프로퍼티들이 확인되고 있다. 여기서 눈여겨 봐야 할 부분 중 1군데는 확대한 아래의 이미지이다.
맨 아래에 constructor를 보면 Array()로 확인되는 것을 볼 수 있다. instance._ _ proto _ _.constroctor = Array가 된다는 의미이다.
prototype은 Object의 new연산자를 이용해서 만든 instance이다. 그래서 모든 prototype들은 Object.prototype을 사용할 수 있게 된다. 이것을 프로토타입 체이닝이라고 한다.
위의 경우처럼 다른 타입은 Object.prototype의 메소드를 사용할 수 있지만 Object만 메소드를 공유하고 공유받는 메소드는 없다. 그래서 Object에서만 사용가능한 함수를 생성자함수에 지정되어 있다.