본문 바로가기

Today I Learned

모던 자바스크립트 Deep Dive 16장 프로퍼티 어트리뷰트

🔑 키워드 정리

  • 프로퍼티 어트리뷰트 : 프로퍼티의 상태를 나타내는 값을 말한다. 자바스크립트 엔진이 프로퍼티를 생성할 때 자동으로 정의한다.
  • 프로토타입 : 어떤 객체의 상위 객체의 역할을 하는 객체다. 19장에서 자세히 다룬다.

📗 내용 정리

내부 슬롯, 내부 메서드

자바스크립트 엔진의 내부 로직으로 ECMAScript 사양에서 이중 대괄호([[ ... ]])로 감싼 이름들이다. __proto__를 통해 간접적으로 접근할 수 있다. Object.getOwnPropertyDescriptor 메서드는 프로퍼티 디스크립터 객체를 반환한다. 객체 정보에는 프로퍼티 값(value), 값의 갱신 가능 여부(writable), 열거 가능 여부(enumerable), 재정의 가능 여부(configurable)가 있다.

데이터 프로퍼티

프로퍼티 어트리뷰트 프로퍼티 디스크립터
객체의 프로퍼티
설명
[[Value]] value 프로퍼티 값
[[Writable]] writable 값의 갱신 가능 여부. 불리언 값
[[Enumerable]] enumerable 열거 가능 여부. 불리언 값
[[Configurable]] configurable 재정의 가능 여부. 불리언 값

접근자 프로퍼티

자체적으로 값(프로퍼티 어트리뷰트의 [[Value]])을 가지지 않으며, 데이터 프로퍼티의 값을 읽거나 저장할 때만 사용하는 접근자 함수로 구성되어 있다.

프로퍼티 어트리뷰트 프로퍼티 디스크립터
객체의 프로퍼티
설명
[[Get]] get 접근자 함수. getter 함수가 호출되고 값이 반환된다.
[[Writable]] writable 접근자 함수. setter 함수가 호출되고 값이 저장된다.
[[Enumerable]] enumerable  
[[Configurable]] configurable  

프로퍼티 정의

프로퍼티 어트리뷰트를 정의하거나 재정의하는 것을 말한다. Object.defineProperty 메서드(복수 객체 정의는 Object.defineProperties)를 사용해서 정의할 수 있다. 단, [[Configurable]] 값이 false인 경우 해당 프로퍼티를 삭제하거나 재정의할 수 없다.