object.preventExtensions 메서드는 객체의 확장을 금지한다.
추가 할때쓰는 object.defineProperty 메서드를 써도 추가가 되지 않는다.
const person = { name: "alan"};
//확장 가능을 판별하는 메서드
console.log(Object.isExtensible(person));
//true
Object.preventExtensions(person);
//확장을 금지 시킴
console.log(Object.isExtensible(person));
//false
person.age = 20;
console.log(person);
//{name: "alan"}
//객체의 프로퍼티가 추가 되지 않음.
delete person.name;
console.log(person);
// {}
//추가는 안되지만 삭제는 된다.
Object.defineProperty(person, 'age', {value: 20});
//TypeError: Cannot define Property age, object is not extensible
//프로퍼티 재정의에 의한 프로퍼티 추가도 금지된다.
Object.seal 메서드는 객체를 밀봉한다. 이는 프로퍼티 추가 및 삭제와 프로퍼티 어트리뷰트 재정의 금지를 의미한다. 읽기와 쓰기만 가능하다.
const person = {name: 'alan"}
console.log(Object.isSealed(person));
//false
//밀봉됐는지 확인
Object.seal(person);
//객체 밀봉
console.log(Object.isSealed(person));
//true
console.log(Object.getOwnPropertyDescriptors(person)
person.age = 20;
console.log(person);
//{name: 'alan'}
//객체 추가 금지
delete person.name;
console.log(person);
//{name: 'alan'}
//객체 삭제 금지
person.name = 'kim';
console.log(person);
//{name: 'kim'}
//프로퍼티 값 갱신은 가능하다.