Javascript

[모자딥]프로퍼티 어트리뷰트 16.01 ~ 16.02

index.ys 2023. 11. 19. 22:31

내부 슬롯 , 내부 메서드

  • 내부 슬롯과 내부 메서드는 자바사크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티와 의사 메서드이다. ECMAScript 사양에 등장하는 이중 대괄호로 감싼 이름들이 내부 슬롯과 내부 메서드 이다
  • [[Value]] , [[Writable]], [[Enumerable]], [[Configurable]] 등
  • 내부 슬롯과 내부 메서드는 자바스크립트 엔진에서 실제로 동작하지만 개발자가 직접 접근할 수 없음
  • 내부 슬롯과 내부 메서드는 자바스크립트 메서드에 직접접근하거나 호출 할 수 있는 방법들 제공하지 않음
  • __proto__ 문법을 통해 간접적으로 접근 가능

 

const o = {}
o.__proto__ // => object.prototype


// Uncaught SyntaxError: Unexpected toekn '['
console.log(o.[[Prototype]])

//일부 내부 슬롯과 내부 메서드에 한하여 간접적으로접근할 수 있는 수단을 제공
//[Object: null prototype] {}
console.log(o.__proto__)
  • 데이터 어트리뷰트를 나타냄
  • [[Value]] => 프로퍼티의 실제 값을 나타냄
  • [[Writable]] => 해당 프로퍼티의 값이 변경 가능한지 여부를 나타냄
  • [[Enumrable]] => 프로퍼티가 열거가 가능한지 여부를 나타냄
  • [[Configurable]] =>  프로퍼티가 속성을 변경하거나 프로퍼티를 삭제할 수 있는지 여부를 나타냄
  • Object.getOwnPropertyDescriptor 메서드를 사용하여 간접적으로 프로퍼티 어트리뷰트를 확인
  • Object.getOwnPropertyDescriptors 메서드는 모든 프로퍼티의 프로퍼티 어트리뷰트 정보를 제공하는 프로퍼티 디스크립터 객체를 반환
const person = {
    name: 'kim',
    age: 18
}


//Obejct.getOwnPropertyDescriptor 메소드를 통해 간접적으로 프로퍼티 어트리뷰트 확인
{ value: 18, writable: true, enumerable: true, configurable: true }
//첫번쨰 인자로 객체의 참조, 두번째 인자로 프로퍼티 키를 문자열로 전달
console.log(Object.getOwnPropertyDescriptor(person, 'age'))

//Object.getOwnPropertyDescriptors 모든 객체 반환
//{
//  name: { value: 'kim', writable: true, enumerable: true, configurable: true },
//  age: { value: 18, writable: true, enumerable: true, configurable: true }
//}
console.log(Object.getOwnPropertyDescriptors(person))