Javascript의 모든 객체에는 프로토타입이 있습니다. 시도해 보세요:
var Richard = new Object( );
alert(typeof(Richard.prototype));
결과가 실망스럽고 브라우저가 정의되지 않은 팝업으로 나타납니다.
무슨 일이 일어나고 있나요?
다른 예 보기:
function Richard(){}
alert(typeof(Richard.prototype));
위의 예는 함수 객체에만 프로토타입이 있고 일반 객체 객체에는 프로토타입이 없다는 것을 보여주는 것 같습니다. 프로토타입이 있나요? 사실은 무엇인가요?
다른 문장을 실행해보면 이해가 됩니다.
var Richard = new Object();
alert(Richard.__proto__)
이해하셨나요?
사실 우리 모두는 오해를 하고 있는데, 즉 자바스크립트 객체의 프로토타입 체인을 구성하는 프로토타입은 프로토타입이라는 속성이고, 접근이 가능하다는 것입니다. 사실 자바스크립트의 프로토타입과 프로토타입이라는 속성은 처음에는 전혀 관련이 없습니다.
일반 객체의 경우 __proto__와 같은 속성을 통해서만 Object 객체에서 상속된 프로토타입에 액세스할 수 있습니다.
함수 객체의 경우 생성 시 함수의 프로토타입입니다. 객체는 프로토타입 속성에 할당됩니다.