[객체 프로퍼티 설정]

  1. 프로퍼티 플래그와 설명자 프로퍼티는 키-값의 쌍으로만 다뤘으나 훨씬 유연한 자료구조이다.
  • 프로퍼티 플래그 값 과 함께 가지는 flag 속성이 있다. 1) writable : true 이면 값을 수정 가능 2) enumerable : true 면 반복문으로 나열 가능 3) configurable : true 이면 프로퍼티 삭제 혹은 수정 가능

프로퍼티의 flag default 값은 모두 true, 언제든 수정이 가능하다.

  •   let descriptor = Object.getOwnPropertyDescriptor(obj, propertyName);
    

    위와 같이 해당 프로퍼티의 정보를 얻을 수 있음 obj 객체명 propertyName 프로퍼티 명

  • descriptor를 찍을 땐 JSON.stringify 로 찍어준다.
    property descriptor:
    {
      "value": "John",
      "writable": true,
      "enumerable": true,
      "configurable": true
    }
    

    위와 같이 출력된다.

  • Object.defineProperty(obj, propertyName, descriptor) 위를 사용하면 프로퍼티를 만들 수 있음 descriptor : 새롭게 만들 프로퍼티/플래그 정보 기존에 만드는 프로퍼티 생성법과 다르게 이 방법으로 만들면 플래그 정보가 모두 false로 만들어짐
  Object.defineProperty(user, "name", {
    writable: false
  });

이렇게 만들면 writable 을 false로 만들 수 있다.

  • enumerable 플래그 열거가 불가능한 메서드가 있다. 대표적으로 toString() ex)
      let user = {
    name: "John",
    toString() {
      return this.name;
    }
      };
    

열거가 불가능하다는 것은 for in 구문에 호출이 안된다는 것이다. 그런데 커스텀 toString을 추가하면 for in 구문에 toString이 나타난다.