프로토타입 객체
자바스크립트의 모든 객체는 자신의 부모 역할을 담당하는 객체와 연결되어 있다.
=> 부모 객체의 프로퍼티 또는 메소드를 상속받아 사용할 수 있게 한다.
이러한 부모 객체를 Prototype(프로토타입) 객체 또는 줄여서 Prototype(프로토타입)이라 한다.
Prototype 객체는 생성자 함수에 의해 생성된 각각의 객체에 공유 프로퍼티를 제공하기 위해 사용한다.
자바스크립트의 모든 객체는 [[Prototype]]이라는 인터널 슬롯을 가진다.
[[Prototype]]의 값은 null 또는 객체이며 상속을 구현하는데 사용된다.
[[Prototype]] 객체의 데이터 프로퍼티는 get 액세스를 위해 상속되어 자식 객체의 프로퍼티처럼 사용할 수 있다.
하지만 set 액세스는 허용되지 않는다.
[[Prototype]]의 값은 프로토타입 객체이며 __proto__로 접근할 수 있다.
__proto__프로퍼티에 접근하면 내부적으로 Object.getPrototypeOf가 호출되어 프로토타입 객체를 반환한다.
객체를 생성할 때 프로토타입은 결정된다.
결정된 프로토타입 객체는 다른 임의의 객체로 변경할 수 있다. (동적으로 변경 가능!)
[[Prototype]] vs prototype 프로퍼티
모든 객체는 자신의 프로토타입 객체를 가리키는 [[Prototype]] 인터널 슬롯을 갖으며 상속을 위해 사용된다.
- [[Prototype]]
- 함수를 포함한 모든 객체가 가지고 있는 인터널 슬롯
- 객체의 입장에서 자신의 부모 역할을 하는 프로토타입 객체를 가리키며 함수 객체의 경우 Function.prototype을 가리킨다.
- prototype 프로퍼티
- 함수 객체만 가지고 있는 프로퍼티
- 함수 객체가 생성자로 사용될 때 이 함수를 통해 생성될 객체의 부모 역할을 하는 객체(프로토타입 객체)를 가리킨다.
객체 생성 방식 | 엔진의 객체 생성 | 인스턴스의 prototype 객체 |
객체 리터럴 | Object() 생성자 함수 | Object.prototype |
Object() 생성자 함수 | Object() 생성자 함수 | Object.prototype |
생성자 함수 | 생성자 함수 | 생성자 함수 이름.prototype |
'항해 > TIL' 카테고리의 다른 글
TIL(2/26) / Redux Toolkit(Feat.Flux Pattern) (0) | 2024.02.26 |
---|---|
TIL(2/23) / HTTP (0) | 2024.02.23 |
TIL(2/17) / JS 이벤트 (0) | 2024.02.17 |
TIL(2/15) / 객체, 변경불가성, 빌트인 객체 (0) | 2024.02.15 |
TIL(2/13) / JS 메서드 (0) | 2024.02.13 |