javascript

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

daeyun대윤 2024. 6. 4. 14:06

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