객체 잠그기

Doum Kim·2020년 3월 20일
0

Javascript

목록 보기
3/23
post-thumbnail

📌 확장 가능 속성

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

📌 확장 방지 (Object.preventExtensions)

Object.preventExtensions 메서드를 이용해 객체의 확장을 방지한다. 번복이 불가하다.

const obj = {};

Object.preventExtensions(obj);

try {
  Object.defineProperty(obj, 'property1', {
    value: 42
  });
} catch (e) {
  console.log(e);
  // Expected output: TypeError: Cannot define property property1, object is not extensible
}

Object.isExtensible 메서드를 이용해 객체의 확장 가능 속성을 확인할 수 있다.

📌 밀봉 (Object.seal)

Object.seal 메서드는 객체를 밀봉한다. 여기서 의미하는 밀봉은 프로퍼티 추가를 막고 기존 프로퍼티의 configuarable flag를 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 }

Object.isSealed 메서드를 사용해 객체가 밀봉 상태인지 확인 가능하다.

📌 동결 (Object.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 }

Object.isFrozen으로 동결 상태를 확인 가능하다.


참조

모던 자바스크립트 입문
MDN web docs - Object.preventExtensions
MDN web docs - Object.freeze
MDN web docs - Object.seal

0개의 댓글