__proto__ 란?
- 객체에서 __proto__를 통해 프로토타입에 접근 가능
- 프로토타입은 내부슬롯 [[Prototype]]으로 존재
- __proto__ : 접근자 프로퍼티로 [[Prototype]]에 접근
- 접근자 프로퍼티 : 다른 프로퍼티나 내부슬롯을 읽거나 저장할때 사용
- 사용하는 이유
- 서로 프로토타입을 참조해서 프로토타입 체인이 꼬여버리는 현상을 방지하기 위해
- 프로토타입 검색할때 무한 루프에 빠져버리게됨
- 접근자 프로퍼티 내에서 서로를 참조하는지 체크
- 직접 사용하는 것은 권장되지 않음
- Object.getPrototypeOf 사용 : 프로토타입 가져올때
- Object.setPrototypeOf 사용 : 프로토타입 지정할때
- 이유 : 모든 객체가 __proto__를 가지고 있지 않음
- __proto__는 Object.prototype의 접근자 프로퍼티
- Object.prototype을 상속받지 않을경우 사용 불가능
- 예시 : null을 상속받아 생성한 객체는 사용 불가
출처
- 모던 자바스크립트 Deep Dive, Ch 19