Object.getOwnPropertyDescriptor(obj, key) : 객체 프로퍼티에 관한 정보를
볼 수 있다.
Object.getOwnPropertyDescriptors(obj) : 객체에 저장된 모든 프로퍼티 정보를
볼 수 있다.
Object.defineProperty(obj,key,descriptor) : 객체 프로퍼티를 추가하고 정의
할 수 있다.
ex) Object.defineProperty(obj,'name', {
value: 'John',
writable: false,
enumerable: false,
configurable: false,
})
value값은 필수로 들어가야하며 나머지는 지정해주지 않으면 false이다.
writable: 현재 프로퍼티 값을 수정 가능하게 할지의 여부.
enumerable: 열거 가능 여부 false이면 for in, Object.keys()등으로 값을
얻을 수 없다.
configurable: false이면 프로퍼티 삭제, 값, 플래그등을 수정 불가능하게 함.
writable은 true였다면 false로는 수정 가능함. 역은 불가능.
Ojbect.defineProperties(obj, descriptors) : 여러 프로퍼티 추가
ex) Object.defineProperties(obj, {
name: {value: 'Tom', writable: true},
age: {value: 24, configurable: true},
})
getter : 값을 얻으려고 할 때 실행되는 메서드
setter : 프로퍼티에 값을 할당하려고 할 때 실행되는 메서드
let user = {
name: 'John',
surname: 'Smith',
get fullname() {
return this.name + this.surname;
},
set fullname(value) {
return [this.name, this.surname] = value.split(' ');
},
}
console.log(user.fullname) // 'Jhon Smith'
user.fullname = 'hyo goose'
console.log(user.name, user.surname) // 'hyo goose'
fullname은 가상의 프로퍼티이다. 접근자 프로퍼티의 장점은 메서드이기 때문에
조건이나 제약을 걸어 유동적으로 값을 얻어 낼 수 있다는 것.