Object의 static 함수 중, 유용하게 사용할 수 있는 세가지 : freez, seal, preventExtensions
const ellie = {name: '엘리'};
const dog = {name: '와우', emoji: '🐶', owner: ellie };
Object.freeze(dog);
dog.name = '멍멍';
console.log(dog); // { name: '와우', emoji: '🐶', owner: { name: '엘리' } }
dog.age = 4;
console.log(dog); // { name: '와우', emoji: '🐶', owner: { name: '엘리' } }
delete dog.name; // { name: '와우', emoji: '🐶', owner: { name: '엘리' } }
console.log(dog);
ellie.name = '엘리얌'; // shallow freez
console.log(dog); // { name: '와우', emoji: '🐶', owner: { name: '엘리얌' } }
const cat = {};
Object.assign(cat, dog); // const cat = {...dog};과 같음
console.log(cat);
Object.seal(cat);
cat.name = '냐옹'
console.log(cat); // { name: '냐옹', emoji: '🐶', owner: { name: '엘리얌' } }
delete cat.emoji;
console.log(cat); // 삭제는 안됨
console.log(Object.isFrozen(dog));
console.log(Object.isSealed(cat));
const tiger = {name: '어흥'};
Object.preventExtensions(tiger);
console.log(Object.isExtensible(tiger));
tiger.name = '어흐응';
console.log(tiger);
delete tiger.name;
console.log(tiger);
tiger.age = 1;
console.log(tiger); // {} 추가되지 않음