자바스크립트의 모든 객체는 자신의 부모 역할을 담당하는 객체와 연결되어 있다.
이것은 부모객체의 프로퍼티 또는 메소드를 상속받아 사용할 수 있게 한다.
이걸 프로토타입 객체라고 함.
프로토타입 객체는 생성자 함수에 의해 생성된 각각의 객체에 공통의 프로퍼티를 제공함.
[[Prototype]]의 값은 null 또는 객체이며 상속을 구현하는데 사용
[[Prototype]] 객체의 데이터 프로퍼티는 get 액세스를 위해 상속되어 자식 객체의 프로퍼티처럼 사용
set 액세스는 허용되지 않는다.
모든 객체는 proto 접근자 프로퍼티를 통해 자신의 프로토타입. 즉 [[Prototype]] 내부 슬롯에 간접적으로 접근할 수 있다.
자체적인 getter, setter가 있어서 내부 슬롯의 값들을 가져오거나 할당한다.
obj.가 객체일때 obj.__proto__를 하면 getter가 실행
obj.proto = {} 를 하면 setter가 실행
<aside> 💡
즉 기존 Object.prototype으로부터 상속받았던 체인을 변경하는 행위로 obj는 {} 를 상속받게되어 이 순간부터 prototype 프로퍼티는 사용 불가.
</aside>
<aside> 💡
객체.__proto__가 된다고 해서
__ proto__ 는 객체가 직접 가지고있는게 아니라 Object.prototype의 프로퍼티임.
즉 Object.prototype.proto 인거임.
모든객체가 Object.prototype을 상속받기때문에 __ proto__를 사용할 수 있는거임.
</aside>