티스토리 뷰
객체는 리터럴표기법, 생성자 함수에 의해 생성되므로 결국 모든 객체는 생성자 함수와 연결되어있다.
프로토타입은 생성자 함수가 생성되는 시점에 생성된다. 앞에서 확인해본 바와 같이 생성자 함수는 단독으로 존재할 수 없고 쌍으로 존재하기 때문이다.
생성자 함수는 사용자 정의 생성자 함수와 기본으로 제공되는 빌트인 생성자 함수로 구분할 수 있다.
1. 사용자 정의 생성자 함수와 프로토타입 생성 시점
일반 함수(함수 선언문, 함수 표현식)로 정의한 함수 객체는 내부 메서드 [[Construct]]를 갖기 때문에 new연산자와 함께 생성자 함수로서 호출할 수 있다.
// 함수 정의(constructor)가 평가되어 함수 객체를 생성하는 시점에 프로토타입도 더불어 생성된다.
console.log(Person.prototype); // {constructor: ƒ}
// 생성자 함수
function Person(name) {
this.name = name;
}
이와 다르게, 생성자 함수로서 호출할 수 없는 non-constructor는 프로토타입이 생성되지 않는다.
// 화살표 함수는 non-constructor다.
const Person = name => {
this.name = name;
};
// non-constructor는 프로토타입이 생성되지 않는다.
console.log(Person.prototype); // undefined
함수 선언문은 런타임 이전에 JS엔진에 의해 먼저 실행되기 때문에, 함수 선언문으로 정의된 Person생성자 함수는 어떤 코드보다 먼저 평가되어 함수 객체가 되며 이때 프로토타입도 더불어 생성된다.
생성된 프로토타입은 Person생성자 함수의 prototype 프로퍼티에 바인딩된다.

생성된 프로토타입은 오직 constructor 프로퍼티만을 갖는 객체다.
프로토타입도 객체고, 모든 객체는 프로토타입을 가지므로 프로토타입도 자신의 프로토타입을 갖는다.
생성된 프로토타입은 언제나 Object.prototype이다.

이처럼 빌트인 생성자 함수가 아닌 사용자 정의 생성자 함수는 자신이 평가되어 함수 객체로 생성되는 시점에 프로토타입도 더불어 생성되며, 생성된 프로토타입의 프로토타입은 언제나 Object.prototype이다.
2,빌트인 생성자 함수와 프로토타입 생성 시점
Object,String, Number, Function, Array, RegExp, Date, Promise등과 같은 빌트인 생성자 함수도 일반 함수와 마찬가지로 빌트인 생성자 함수가 생성되는 시점에 프로토타입이 생성된다.
모든 빌트인 생성자 함수는 전역객체가 생성되는 시점에 생성된다. 생성된 프로토타입은 빌트인 생성자 함수의 prototype 프로퍼티에 바인딩된다.

이처럼 객체가 생성되기 이전에 생성자 함수와 프로토타입은 이미 객체화되어 존재한다. 이후 생성자 함수 또는 리터럴 표기법으로 객체를 생성하면 프로토타입은 생성된 객체의 [[Prototype]]내부 슬롯에 할당되며 프로토타입을 상속받는다.
'스터디 자료' 카테고리의 다른 글
| [모던 자바스크립트] 19장 프로토타입 (0) | 2024.04.24 |
|---|---|
| [딥다이브]함수 객체의 프로퍼티 (0) | 2024.04.11 |
| [스코프] 함수 레벨 스코프와 렉시컬 스코프 (1) | 2024.03.07 |
| [객체란?] (2) | 2024.01.11 |
| 17주 기초 교육 학습자료(11주차~14주차) (0) | 2023.10.15 |
- Total
- Today
- Yesterday
- Get
- 호이스팅
- delete
- 자바스크립트
- 렌더트리
- set
- CSSOM
- 심볼
- TypeScript
- DOM
- http
- React
- yarn berry
- 타입변환
- 옵셔널체이닝연산자
- Front-End
- Vite
- JS
- defer
- node
- 공부
- 1일차
- html #css #코딩 #공부
- async
- yarn 4
- forEach
- JavaScript
- MAP
- 단축평가
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |