Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 개체 수정을 방지하는 방법은 무엇입니까?

<시간/>

ECMAScript 5는 객체 수정을 방지하기 위해 몇 가지 방법을 도입했습니다. 이러한 예방 조치는 아무도 실수로 또는 다른 방법으로 개체의 기능을 변경하지 못하도록 합니다.

예방 방법에는 3가지 수준이 있습니다.

1) 확장 프로그램 방지

이 수준에서는 새 속성이나 메서드를 추가할 수 없지만 기존 속성이나 메서드에 액세스할 수 있습니다. 여기에 해당 개체를 삭제하는 기능이 있습니다. Object.preventExtensions() 이 작업을 수행하는 데 사용되는 방법입니다. 새로운 속성이 개체에 추가되는 것을 방지합니다.

예시

<html>
<body>
<script>
   var object1 = {
      prop1: 1
   };
   Object.preventExtensions(object1);
   delete object1.prop1 // value got deleted
   try {
      Object.defineProperty(object1, 'prop2', {
      value: 2
   });
   } catch (err) {
   document.write(err);
   }
   document.write("</br>");
   document.write(object1.prop1);
</script>
</body>
</html>

출력

TypeError: Cannot define property prop2, object is not extensible
undefined // deleted so undefined

2) 인장

확장을 방지하는 것과 동일하며 기존 속성이나 메서드를 삭제할 수 없습니다. 이 작업을 수행하려면 Object.seal() 방법을 사용합니다.

예시

<html>
<body>
<script>
   var object1 = {
      prop1: 1
   };
   Object.seal(object1);
   object1.prop1 = 2;                 // value got changed
   delete object1.prop1;
   try {
      Object.defineProperty(object1, 'prop2', {
      value: 2
   });
   } catch (err) {
      document.write(err);
   }
   document.write("</br>");
   document.write(object1.prop1); // it gives value as 2 because of seal.
</script>
</body>
</html>

출력

TypeError: Cannot define property prop2, object is not extensible
2  // because of seal the value can't be deleated but got updated

3) 정지

봉인의 기능 외에도 동결은 기존 속성에 대한 액세스조차 허용하지 않습니다. 객체를 고정하려면 Object.freeze()를 사용합니다. 방법. 또한 개체를 불변으로 만들 수도 있습니다. .

예시

<html>
<body>
<script>
   var object1 = {
      prop1: 1
   };
   Object.freeze(object1);
   object1.prop1 = 2;          //  value got updated
   delete object1.prop1;        // value got deleted
   try {
      Object.defineProperty(object1, 'prop2', {
      value: 2
   });
   } catch (err) {
      document.write(err);
   }
   document.write("</br>");
   document.write(object1.prop1);  // it gives 1 as output despite value updated to 2
</script>
</body>
</html>

출력

TypeError: Cannot define property prop2, object is not extensible
1 // because of freeze the value won't get delete and won't get update.