본문 바로가기

javascript

모던 자바스크립트 Depp Dive 16장 정리 데이터 프로퍼티와 접근자 프로퍼티

16.1 
내부 슬롯과 내부 메서드는 자바스크립트 엔진의 구현 알고르짐을 설명하기 위해 ECMAScript 사양에서 사용하는
의사 프로퍼티(pseudo property)와 의사 메서드(pseudo method)이다.
ECMAScript 사양에 등장하는 이중 대괄호 [[ ... ]] 로 감싼 이름들이 내부 슬롯과 내부 메서드다.

개발자가 직접 전근할 수 있도록 외부에 공개된 객체의 프로퍼티가 아니다.

자바스크립트의 엔진의 내부 로직이므로 원칙적으로는 직접 전근하거나 호출할 수 있는 방법을 제공하지 않는다. 단 일부에 한하여 간접적으로 접근 할 수 있는 수단을 제공한다. 예를들어,  모든 객체는 [[Prototype]] 이라는 내부 슬롯(pseudo property)을 갖는다. 
__proto__를 통해 간접적으로 접근 가능하다.


16.2 프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체.

자바스크립트 엔진은 프로퍼티 생성할 때, 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트 기본값으로 자동 정의한다.

프로퍼티의 상태 :
1) 프로피터의 값 value
2) 값의 갱신 가능 여부  writable
3) 열거 가능 여부 enumerable : for...in 루프나 Object.keys 메서드와 같은 방법으로 열거될 수 있는지를 나타냄.
4) 재정의 가능 여부 configurable

프로퍼티 어트리뷰트는 자바스크립트 엔진이 관리하는 내부 상태 값(meta-property)인 내부 슬롯(의사 프로퍼티, pseudo property)이다.
따라서 프로퍼티 어트리뷰트에 직접 접근할 수 없지만 Object.getOwnPropertyDescriptor 메서드 사용하여 간접적으로 확인 할 수는 있다.



Object.getOwnPropertyDescriptor 메서드 호출할 때, 
첫번째 매개변수 : 객체의 참조
두번쨰 매개변수 : 프로퍼티 키를 문자열로 전달.

conset person = {
  name : 'Kim'
};
person.age = 35;

console.log(Object.getOwnPropertyDescriptors(person); // 모든 프로퍼티의 프로퍼티 어트리뷰트 정보를 제공하는 프로퍼티 디스크립터 객체들을 반환.
console.log(Object.getOwnPropertyDescriptor(person, 'name');

getOwnPropertyDescriptor :  하나의 프로퍼티에 대해 프로퍼티 디스크립터 객체를 반환.
getOwnPropertyDescriptors : 모든 프로퍼티의 프로퍼티 어트리뷰트 정보를 제공. ES8에 도입됨.

프로퍼티 디스크립터 객체 반환한다.
Property Descriptor : 프로퍼티 어트리뷰트에 접근하거나 설정하기 위해 사용.
객체의 프로퍼티 어트리뷰트를 설명하는 객체.

프로퍼티 디스크립터엔는 2가지 유형이 있다.
1) 데이터 디스크립터
2) 접근자 디스크립터 


728x90
300x250