자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티와 의사 메서드다.
ECMAScript사양에 등장하는 이중 대괄호 ([[...]])로 감싼 이름들
내부 로직이므로 직접적으로 접근하거나 호출하는 방법을 제공하지 않는다.
단, 일부는 간접적으로 접근할 수 있는 수단을 제공하기는 한다. [[prototype]]
모든 객체는 프로토타입이라는 내부 슬롯을 갖는다. _ _ proto __를 통해 간접적으로 접근할 수 있다.
const o = {};
o.[[Prototype]]
- js엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동 정의한다.
- 프로퍼티의 상태란 프로퍼티의 <값, 값 갱신 가능 여부, 열거 가능 여부, 재정의 가능 여부> 말함 =>
- 값 제외 나머지 상태는 불린type으로 true가짐
- 프로퍼티 어트리뷰트에 직접 접근할 수 없지만
메서드 Object.getOwnPropertyDescriptor메서드를 이용하여 간접적으로 확인할 수는 있다.
[[Value]] [[Writable]] [[Enumerable]] [[Configurable]]
Value의 값은 프로퍼티 값으로 초기화 , 나머지 값은 true로 초기화
[[Get]] [[Set]] [[Enumerable]] [[Configurable]]
접근자 함수는 getter/ setter 함수 .
- 어떤 객체의 상위(부모) 객체 역할을 하는 객체다.
- 하위(자식) 객체에게 자신의 프로퍼티와 메서드를 상속한다.
- 상속받은 하위 객체는 자신의 프로퍼티 또는 메서드인 것처럼 자유롭게 사용할 수 있다.
- 프로토 타입체인은 프로토타입이 단방향 링크드 리스트형태로 연결되어 있는 상속구조.
- 객체의 프로퍼티나 메서드에 접근하려고 할 때, 해당 객체에 접근하려는 프로퍼티 또는 메서드가 없다면 프로토타입 체인을 따라 프로토타입의 프로퍼티나 메소드를 차례대로 검색한다.
19장 프로토타입에서 추가 다룸
객체는 변경 가능한 값이므로 재할당없이 직접 변경할 수 있다.
Object.seal 메서드 => 프로퍼티 추가 및 삭제와 프로퍼티 어트리뷰트 재정의 금지 의미 . 읽기와 쓰기만 가능!
답
1. o._ _proto__