티스토리 뷰

01. 프로토타입 생성 시점

프로토타입은 생성자 함수가 생성되는 시점에 생성된다.

 

[JS] 프로토타입 객체와 prototype 프로퍼티

01. 프로토타입 객체 상속을 구현하기 위해 사용한다. 프로토타입을 상속 받게 되면 하위 객체는 상위 객체의 프로퍼티를 자유롭게 사용할 수 있다. 모든 객체는 [[Prototype]]이라는 내부 슬롯을 가

404minda.tistory.com

프로토타입과 생성자 함수는 단독으로 존재할 수 없다.

 

생성자 함수는 사용자가 정의한 생성자 함수와

String, Number, Object 등 자바스크립트가 제공하는 빌트인 생성자 함수로 나뉜다.

 

이 포스팅은 각각의 경우에 프로토타입 생성 시점을 확인하는 내용을 다루고 있다.

 

02. 사용자 정의 생성자 함수

[[Construct]]를 갖는 함수 객체는 new 연산자와 함께 생성자 함수를 호출할 수 있다.

constructor는 함수 정의가 평가되는 시점에 프로토타입도 생성된다.

 

하지만, 생성자 함수가 될 수 없는 경우는 프로토타입이 생성되지 않는다.

const Minda = name => {
	this.name = name;
}; // non-constructor

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

참고로 선언문은 런타임 이전에 실행되므로 Minda 생성자 함수는 어떤 코드보다 먼저 함수 객체가 된다.

 

프로토타입 역시 이 타이밍에 생성된다.

생성된 Minda 함수는 prototype 프로퍼티에 바인딩된다.

console.log(Minda.prototype); // {constructor: f}

// 선언문 먼저 호이스팅 된다.
function Minda(name) {
	this.name = name;
}

 

모든 객체는 프로토타입을 가지므로 프로토타입도 자신만의 프로토타입을 갖는다.

Minda.prototype의 프로토타입은 Object.prototype이다.

 

참고로 Object.prototype은 프로토타입 체인의 종점이다.

Object.prototype의 프로토타입, [[Prototype]]의 값은 null이다.

 

03. 빌트인 생성자 함수

모든 빌트인 생성자 함수는 전역객체가 생성되는 시점에 생성된다.

이 프로토타입은 빌트인 생성자 함수의 prototype 프로퍼티에 바인딩된다.

 

전역객체는 자바스크립트 엔진에 의해 생성되는 객체다.
window, global 객체를 의미한다.

 

이처럼 프로토타입은 객체 생성 이전에 생성자 함수가 만들어졌을 적에 객체화되어 존재한다.

생성된 객체는 이전에 생성자 함수에 바인딩된 프로토타입을 상속받는 것이다.

댓글