prototype

프로토타입 객체

자식 객체에게 프로퍼티 및 메서드를 제공하는 부모 객체

JavaC++와 같은 클래스 기반 객체지향 프로그래밍 언어와 달리 JS프로토타입 기반 객체 지향 언어로써, 클래스 없이도 객체(인스턴스)를 생성할 수 있다.

JS의 모든 객체는 가장 최상위 부모 까지의 객체와 연결되어 있는데, 이는 객체 지향의 상속 처럼 부모 객체의 프로퍼티 및 메서드를 상속 받아 사용할 수 있다. 이를 Prototype 객체라고 한다.

Prototype 객체는 생성자 함수에 의해 생성된 각각의 객체에 공유 프로퍼티를 제공하기 위해 사용된다.

[[Prototype]]

모든 객체가 가지는 인터널 슬롯

[[Prototype]]null(최상위 객체) 또는 객체인 프로토타입 객체 이며 상속을 구현하는데 사용된다.

__proto__라는 프로퍼티로 접근이 가능하며, 접근 시 내부 적으로 Object.getPrototypeOf가 호출되어 프로토타입 객체를 반환한다.

[[Prototype]] vs prototype 프로퍼티

모든 객체는 [[Prototype]]이라는 인터널 슬롯을 갖지만 함수는 일반 객체와 달리 prototype 프로퍼티도 갖게 된다.