항해/TIL

TIL(2/19) / 프로토타입

yeeendy 2024. 2. 19. 17:21

프로토타입 객체

자바스크립트의 모든 객체는 자신의 부모 역할을 담당하는 객체와 연결되어 있다.

=> 부모 객체의 프로퍼티 또는 메소드를 상속받아 사용할 수 있게 한다.

이러한 부모 객체를 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