JavaScript는 프로토타입 기반 언어 입니다. 프로토타입(Prototype)은 원형 객체를 뜻합니다. 부모 자식 관계에 상속을 위해 사용되어 유전자의 개념으로 볼 수 있습니다.
함수 객체만 가지고 있는 프로퍼티이다.
함수 객체가 생성자로 사용될 때 이 함수를 통해 생성될 객체의 프로토타입 객체를 가리킵니다.
함수를 포함한 모든 객체가 가지고 있는 인터널 슬롯입니다.
객체의 상속을 구현하는 프로토타입 객체를 가리킵니다.
__proto__
모든 객체는 __proto__
를 통해 자신의 프로토타입 내부로 접근 할 수 있습니다. 하지만, 코드내에서 프로토타입 내부로 접근 할 때엔 아래와 같은 메서드들을 활용하면 좋다고 모던 자바스크립트는 말합니다.
Object.create(proto, [descriptors])
// [[Prototype]]이 proto인 객체를 만듭니다.
// 참조 값은 null일 수 있고 프로퍼티 설명자를 넘기는 것도 가능합니다.
Object.getPrototypeOf(obj)
// obj의 [[Prototype]]을 반환합니다(__proto__ getter와 같습니다).
Object.setPrototypeOf(obj, proto)
// obj의 [[Prototype]]을 proto로 설정합니다(__proto__ setter와 같습니다).
이 셋은 서로 연결되어 있으며 프로토타입 체인이라는 단방향성을 띄고있습니다. 이는 서로가 서로의 프로토타입이 되는 것을 방지하기 위함입니다.
피드백은 항상 환영입니다 :D