Javascript - DeepDive(4) : 객체 잠그기

­이승환·2021년 7월 21일
0

Javascript DeepDive

목록 보기
4/13

확장 가능한 속성


객체의 확장 가능 속성 (extensible) 속성은 새로운 프로퍼티를 추가할 수 있는지에 대해 결정한다.

PreventExtensions


Object.preventExtensions 메서드를 이용해 객체의 확장 방지를 방지 할 수 있다. 단 번복할 수 없다.

const obj = {};

Object.preventExtensions(obj);

try {
	Object.defineProperty(obj, "property1", { value : 42 });
} catch(e) {
	console.log(e);
    // error!!
}

Object.seal


Object.seal 은 객체를 밀봉한다고 생각하면 된다. 여기서 의미하는 밀봉은 프로퍼티 추가를 막는것이고, 기존 프로퍼티 configurable = false 로 변경해준다. 하지만 쓰기가 가능한 속성의 값은 밀봉 후에도 변경할 수 있다.

const object1 = {
  property1: 42
};

Object.seal(object1);
object1.property1 = 33;
console.log(object1.property1);
// expected output: 33

delete object1.property1; // cannot delete when sealed
console.log(object1.property1);
// expected output: 33

console.log(Object.getOwnPropertyDescriptor(object1,"property1"));
// expected output: Object { value: 33, writable: true, enumerable: true, configurable: false }

Freeze


Object.freeze 메서드는 객체를 동결한다. 즉 객체가 더이상 변경 될 수 없다는 뜻이다. 새로운 프로퍼티 추가, 제거도 막고 값 변경도 막는다. 한마디로 읽기만 가능해진다는 점이다.

const obj = {
  prop: 42
};

Object.freeze(obj);

obj.prop = 33;
// Throws an error in strict mode

console.log(obj.prop);
// expected output: 42

console.log(Object.getOwnPropertyDescriptor(obj,"prop"));
// expected output: Object { value: 42, writable: false, enumerable: true, configurable: false }

정리


정리해보면

이상이다.

profile
Mechanical & Computer Science

0개의 댓글

관련 채용 정보