728x90
반응형
/**
* Immutable Object
*/
const yuJin = {
name: '안유진',
year: 2003,
get age(){
return new Date().getFullYear() - this.year;
},
set age(age){
this.year = new Date().getFullYear() - age;
}
}
console.log(yuJin); // {name: '안유진', year: 2003}
/**
* Extensible
*/
console.log(Object.isExtensible(yuJin)); // true , 기본값
yuJin['position'] = 'vocal';
console.log(yuJin); // {name: '안유진', year: 2003, position: 'vocal'} , position 추가됨
Object.preventExtensions(yuJin); // 값 추가 불가 선언
yuJin['groupName'] = '아이브';
console.log(yuJin); // {name: '안유진', year: 2003, position: 'vocal'} , groupName 추가안됨 , 오류도 발생x
delete yuJin['position'];
console.log(yuJin); // {name: '안유진', year: 2003} , 값 삭제는 가능
/**
* Seal , configurable을 false로 변경하는것과 동일
*/
const yuJin2 = {
name: '안유진',
year: 2003,
get age(){
return new Date().getFullYear() - this.year;
},
set age(age){
this.year = new Date().getFullYear() - age;
}
}
console.log(Object.isSealed(yuJin2)); // false , 기본값
Object.seal(yuJin2);
yuJin2['groupName'] = '아이브';
console.log(yuJin2); // {name: '안유진', year: 2003} , 값추가 안됨
delete yuJin2['name'];
console.log(yuJin2); // {name: '안유진', year: 2003} , 값삭제 안됨
Object.defineProperty(yuJin2, 'name', {
writable: false,
});
console.log(Object.getOwnPropertyDescriptor(yuJin2, 'name')); // {value: '안유진', writable: false, enumerable: true, configurable: false}
/**
* Freezed
* 읽기 외에 모든 기능을 불가능하게 만든다.
*/
const yuJin3 = {
name: '안유진',
year: 2003,
get age(){
return new Date().getFullYear() - this.year;
},
set age(age){
this.year = new Date().getFullYear() - age;
}
}
console.log(Object.isFrozen(yuJin3)); // false , 기본값
Object.freeze(yuJin3);
yuJin3['groupName'] = '아이브';
console.log(yuJin3); // {name: '안유진', year: 2003} , 값 추가 안됨
delete yuJin3['name'];
console.log(yuJin3); // {name: '안유진', year: 2003} , 값 삭제 안됨
// Object.defineProperty(yuJin3, 'name', {
// value: '코드팩토리',
// })
console.log(Object.getOwnPropertyDescriptor(yuJin3, 'name')); // {value: '안유진', writable: false, enumerable: true, configurable: false}
const yuJin4 = {
name: '안유진',
year: 2003,
wonYoung: {
name: '장원영',
year: 2002,
},
};
Object.freeze(yuJin4);
console.log(Object.isFrozen(yuJin4)); // true
console.log(Object.isFrozen(yuJin4['wonYoung'])); // false , 하위 오브젝트는 적용되지 않는다 ★★★
728x90
반응형
'코드팩토리 JS' 카테고리의 다른 글
| 23. scope (0) | 2025.12.27 |
|---|---|
| 22. prototype chain (0) | 2025.12.27 |
| 20. property attribute (1) | 2025.12.26 |
| 19. About Object (0) | 2025.12.26 |
| 18. Class Test (1) | 2025.12.26 |