관리 메뉴

bright jazz music

프로토타입 prototype (4) : 프로토타입의 생성 시점 본문

Language/Javascript

프로토타입 prototype (4) : 프로토타입의 생성 시점

bright jazz music 2025. 5. 12. 22:31

프로토타입은 생성자 함수가 생성되는 시점에 함께 생성된다. 프로토타입과 생성자 함수는 단독으로 존재할 수 없고 언제나 쌍으로 존재하기 때문이다. 생성자 함수는 사용자가 직접 정의한 사용자 정의 생성자 함수와 자바스크립트가 기본 제공하는 빌트인 생성자 함수로 구분할 수 있다.

 

사용자 정의 생성자 함수와 프로토타입 생성 시점

 

생성자 함수로 호출할 수 있는 함수, constructor는 함수 객체를 생성하는 시점에 프로토타입도 더불어 생성된다.

// 생성자 함수가 평가되는 시점에 프로토타입도 더불어 생성됨
console.log(Person.prototype); // {constructor: f} 

// 생성자 함수
function Person(name) {
	this.name = name;
}

/*
함수 선언문은 런타임 이전에 자바스크립트 엔진에 의해 먼저 실행된다.
따라서 위 방식으로 선언된 Person생성자 함수는 어떤 코드보다도 먼저 평가되어 함수 객체가 된다.
이 때 프로토타입도 더불어 생성된다.
생성된 프로토타입은 Person 생성자 함수의 prototype 프로퍼티에 바인딩된다.

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

 

생성자 함수로 호출할 수 없는 함수는 이 시점에는 프로토타입이 생성되지 않는다.

// 화살표 함수는 non-constructor이다
const Person => (name) => {
	this.name = name;
};

console.log(Person.prototype); // undefined

 

-> 사용자 정의 생성자 함수는 그 자신이 평가되어 함수 객체로 생성되는 시점에 프로토타입도 더불어 생성되며, 생성된 프로토타입의 프로토입은 언제나 Object.prototype이다.

 

 

빌트인 생성자 함수와 프로토타입 생성 시점

 

Object, String, Number, Function, Array, RegExp, Date, Promise 등과 같은 빌트인 생성자 함수도 일반 함수와 마찬가지로 빌트인 생성자 함수가 생성되는 시점에 프로토타입이 생성된다. 생성된 프로토타입은 빌트인 생성자 함수의 prototype 프로토타입으로 바인딩 된다.

즉, 객체가 생성되기 이전에 빌트인 생성자 함수와 프로토타입은 이미 객체화되어 존재한다. 이후 생성자 함수 또는 리터럴 표기법으로 객체를 생성하면 프로토타입은 생성된 객체의 [[prototype]] 내부 슬롯에 할당된다. 이로써 생성된 객체는 프로토타입을 상속받는다.

Comments