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쪽
반응형
'Javascript' 카테고리의 다른 글
[Javascript] Javascript 바인딩 (0) | 2017.08.31 |
---|---|
[Javascript] Javascript 프로토타입 (Prototype) (0) | 2017.08.31 |
[Javascript] Javascript 프로퍼티 서술자 (Getter/Setter) (0) | 2017.08.31 |
[Javascript] Javascript의 실행 컨텍스트와 스코프 (0) | 2017.08.30 |
[Javascript] 함수 호이스팅 (Function Hoisting) (0) | 2017.08.29 |