[JavaScript] Prototype

전홍석·2025년 8월 18일

javascript

목록 보기
9/11
post-thumbnail

JS 와 class 기반 언어의 차이

JS 는 클래스 기반 언어(C, Java 등) 와 달리 Prototype 기반 객체지향 언이다.
클래스 없이 객체를 만들고, 객체를 다른 객체와 연결해서 상속을 구현한다.

Prototype 객체

JS의 모든 객체는 부모 객체를 가리키는 내부 슬롯 [[Prototype]] 을 갖는데, 이 부모 객체를 Prototype 이라고 부른다.
객체는 프로토타입 체인을 통해 부모의 속성이나 메서드를 "상속처럼" 사용할 수 있다.

const parent = { greet: () => console.log("hi") }
cnost child = {}
Object.setPrototypeOf(child, parent)

child.greet() // "hi"

[[Prototype]] / prototype 프로퍼티

[[Prototype]]

함수를 포함한 모든 객체가 가지고 있는 인터널 슬롯으로, 객체의 입장에서 자신의 부모 역할을 하는 프로토타입 객체를 가리키며 값은 null 또는 객체이다.
직접 접근은 불가능하고, Object.getPrototypeOf, Object.setPrototypeOf 로만 확인 수정 가능하다.
함수 객체의 경우 Function.prototype를 가르킨다

prototype 프로퍼티

함수 객체만 가지고 있는 프로퍼티로, 함수 객체가 생성자로 사용될 때 이 함수를 통해 생성될 객체의 부모 역할을 하는 객체([[Prototype]])를 가르킨다

Constructor 프로퍼티

프로토타입 객체는 constructor프로퍼티를 갖는데, 이 constructor 프로퍼티는 객체의 입장에서 자신을 생성한 객체를 가르킨다

[[Prototype]] (인터널 슬롯):
객체가 가지는 내부 슬롯, 나의 부모(프로토타입)를 가리킴
prototype 프로퍼티:
함수 객체에만 존재, 생성자를 통해 만든 객체의 [[Prototype]]을 지정
constructor 프로퍼티:
프로토타입 객체가 가지는 속성, 해당 프로토타입을 생성한 함수(생성자)를 가르킴

profile
취뽀까지 숨참기

0개의 댓글