[객체 프로퍼티 설정]
- 프로퍼티 플래그와 설명자 프로퍼티는 키-값의 쌍으로만 다뤘으나 훨씬 유연한 자료구조이다.
- 프로퍼티 플래그 값 과 함께 가지는 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이 나타난다.