ban object extension

agnusdei·2023년 7월 7일
0

Object.preventExtensions, Object.seal, 그리고 Object.freeze는 JavaScript에서 객체의 불변성을 조절하기 위해 사용되는 메소드입니다. 이 세 가지 메소드는 모두 객체의 수정 가능성에 대한 제한을 가지지만, 각각 다른 수준의 제한을 적용합니다.

  1. Object.preventExtensions:

    • Object.preventExtensions 메소드는 새로운 속성의 추가를 방지하여 객체의 확장(extensions)을 막습니다.
    • 이미 존재하는 속성의 수정과 삭제는 여전히 가능합니다.
    • 즉, 객체에 새로운 속성을 추가할 수 없지만, 기존의 속성은 수정이 가능합니다.
    const obj = {
      name: "John",
      age: 30,
    };
    
    Object.preventExtensions(obj);
    
    obj.name = "David"; // 속성 수정은 가능
    obj.salary = 5000; // 새로운 속성 추가는 불가능
    
    console.log(obj); // { name: "David", age: 30 }
  2. Object.seal:

    • Object.seal 메소드는 Object.preventExtensions와 동일한 기능을 수행하며, 추가로 이미 존재하는 속성을 삭제할 수 없도록 합니다.
    • 속성의 수정은 여전히 가능합니다.
    const obj = {
      name: "John",
      age: 30,
    };
    
    Object.seal(obj);
    
    obj.name = "David"; // 속성 수정은 가능
    delete obj.age; // 속성 삭제는 불가능
    obj.salary = 5000; // 새로운 속성 추가는 불가능
    
    console.log(obj); // { name: "David", age: 30 }
  3. Object.freeze:

    • Object.freeze 메소드는 Object.seal과 동일한 기능을 수행하며, 추가로 객체의 속성 수정까지 금지합니다.
    • 객체는 완전히 불변 상태가 됩니다.
    const obj = {
      name: "John",
      age: 30,
    };
    
    Object.freeze(obj);
    
    obj.name = "David"; // 속성 수정은 불가능
    delete obj.age; // 속성 삭제는 불가능
    obj.salary = 5000; // 새로운 속성 추가는 불가능
    
    console.log(obj); // { name: "John", age: 30 }

따라서, 이 세 가지 메소드의 주요 차이점은 다음과 같습니다:

  • Object.preventExtensions: 새로운 속성 추가는 불가능하지만, 기존의 속성은 수정 가능합니다.
  • Object.seal: 새로운 속성 추가와 기존 속성의 삭제는 불가능하지만, 기존의 속성은 수정 가능합니다.
  • Object.freeze: 새로운 속성 추가, 기존 속성의 삭제, 그리고 기존의 속성 수정까지 모두 불가능합니다. 객체가 완전히 불변 상태가 됩니다.

0개의 댓글