본문 바로가기
Javascript

[Javascript] Javascript의 확장 금지, 봉인, 동결

by parkjp 2017. 8. 31.

 

1. 확장 금지

 

 확장 금지란, 객체에 더는 프로퍼티를 추가할 수 없게 차단하고 현재 프로퍼티는 있는 그대로 놔두고 싶을 때 Object.preventExtensions(..)를 호출한다. 여기서 비엄격 모드에서는 프로퍼티를 추가해도 조용히 실패하지만 엄격 모드에서는 TypeError가 난다.

 

var exObject = {
    a : 2
};

Object.preventExtensions(exObject);

exObject.b = 3;
exObject.b; // undefined

 

2. 봉인

 

 Object.seal(..) 함수는 봉인된 객체를 생성한다. 즉, 어떤 객체에 대해 Object.preventExtensions(..)를 실행하고 프로퍼티를 전부 configurable : false 처리한다. 결과적으로 더는 프로퍼티를 추가할 수 없고, 기존 프로퍼티를 재설정하거나 삭제할 수도 없다. 단지 값은 얼마든지 바꿀 수 있다.

 

3. 동결

 

 Object.freeze(..) 함수는 객체를 꽁꽁 얼린다. 위의 Object.seal(..)을 적용하고 데이터 접근자 프로퍼티를 모두 writable : false 처리해서 값도 못 바꾸게 한다. 동결은 가장 높은 단계의 불변성을 적용한 것으로 객체와 직속 프로퍼티에 어떤 변경도 원천 봉쇄한다. 

 

 ** 다만 이것은 얕은 불변성이다. 얕은 불변성은 이 객체가 참조하는 다른 객체의 내용까지 봉쇄하는 것은 아니다. ES5에서는 얕은 불변성만 지원한다.

 

 

 

 

 

 

참조 저서 : 카일 심슨, You Don't Know JS this & Object Prototypes, 한빛미디어, 76

반응형