프로퍼티 플래그
객체의 프로퍼티는 값과 함께 플래그(flag)라고 하는 특별한 속성을 3가지 가지고 있음
3가지 플래그
- writable : 이 속성이 true이면 값을 수정할 수 있고, false이면 수정이 불가능함
- enumerable : 이 속성이 true이면 반복문을 사용하여 나열할 수 있음
- configurable : 이 속성이 true이면 해당 프로퍼티를 삭제하거나 플래그 수정이 가능함
일반적인 방식으로 객체 생성시 위 3가지 플래그의 기본값은 true로 설정되고 플래그를 수정할 수 있음
Object 의 getOwnPropertyDescriptor 메서드를 사용하면 해당 프로퍼티의 정보를 얻을 수 있음
getOwnPropertyDescriptor의 문법
let descriptor = Object.getOwnPropertyDescriptor(object,property)
- object : 해당 프로퍼티가 있는 객체
- property : 정보를 얻을 프로퍼티
위의 메서드로 생성한 것과 같은 프로퍼티의 정보를 descriptor 라고 하는데,Object메서드인 defineProperty 의 인자로 descriptor를 전해주어 프로퍼티를 생성할 수 있음
defineProperty의 문법
Object.defineProperty(object, propertyName, descriptor)
defineProperty와 getOwnPropertyDescriptor의 사용
let obj = {};
Object.defineProperty(obj,'name',{
value:'park',
writable:true
}); // defineProperty를 이용하여 프로퍼티 생성
//getOwnPropertyDescriptor를 이용하여 설명자 생성
let descriptor = Object.getOwnPropertyDescriptor(obj,'name');
console.log(descriptor);
일반적인 방법으로 프로퍼티를 생성했을때는 플래그들의 기본값이 true였지만, definePropery를 이용해서 프로퍼티를 생성했을 때 플래그를 설정해주지 않으면 기본값이 false인 것을 볼 수 있음
Object.defineProperties, Objec.getOwnPropertyDescriptors
defineProperties 메서드를 이용하면 여러개의 프로퍼티를 정의할 수 있고,
Objec.getOwnPropertyDescriptors 메서드를 이용하면 객체의 모든 프로퍼티의 설명자를 가져올 수 있음
let obj = {};
Object.defineProperties(obj,{
name:{value:'park',writable:true},
age:{value:25,enumerable:true}
});
//obj의 모든 프로퍼티 정보를 객체 형태로 가져옴
let desc = Object.getOwnPropertyDescriptors(obj);
for( let key in desc){
console.log(desc[key]);
}
참조: https://ko.javascript.info/property-descriptors
'JavaScript > JavaScript기초' 카테고리의 다른 글
[Javascript] 프로토타입 상속 (0) | 2021.09.29 |
---|---|
[Javascript] 프로퍼티 getter/setter (0) | 2021.09.28 |
[Javascript] 함수 바인딩 (0) | 2021.09.27 |
[Javascript] 데코레이터, 포워딩과 call/apply (0) | 2021.09.27 |
[Javascript] setTimeout과 setInterval (0) | 2021.09.24 |