whatisthis?

javaScript. prototype / __proto__ / constructor 본문

WEB STUDY/JAVASCRIPT

javaScript. prototype / __proto__ / constructor

thisisyjin 2022. 1. 27. 11:34

prototype, __proto__와 constructor의 관계


prototype과 constructor는 부모자식 관계라고 생각하면 된다.

 

Person.prototype.constructor === Person; 이고,

Person.prototype === (Person생성자로 만들어진 객체).__proto__; 이기 때문에

(Person생성자로 만들어진 객체).__proto__.constructor === Person; 도 성립하게 된다.

 

 

모든 객체는 [[Prototype]]이라는 내부 슬롯(자바스크립트 엔진의 내부 로직)을 갖으며,

상속을 구현하는 프로토타입 객체를 가리킨다.

 

[[Prototype]] 내부 슬롯에는 직접 접근이 불가하다.

이는 프로토타입 체인의 단방향을 지키기 위해서다.

(만약 직접 접근가능하다면, 서로가 서로의 프로토타입이 되면서 프로토타입 체인이 무한으로 돈다.)

따라서 __proto__ 프로퍼티로만 접근할 수 있다.

 

모든 객체는 __proto__를 통해 자신의 프로토타입([[Prototype]] 내부 슬롯)에 접근할 수 있다.

 

prototype 프로퍼티는 생성자함수로 호출할 수 있는 객체.

즉, constructor을 소유하는 프로퍼티.

 

>> 일반객체와 생성자로 호출할 수 없는 일반객체는 prototype 프로퍼티가 없다.

function func() {}
func.hasOwnProperty('prototype');     // true


const obj= {}
func.hasOwnProperty('prototype');     // false

 

 

즉, [[prototype]] 내부 슬롯 = 프로토타입.
__proto__ = 프로토타입에 접근할 수단.




 

REFERENCE