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

JavaScript에서 Object.freeze()를 사용하여 중첩된 객체를 변경할 수 없게 만들 수 있습니까?


Object.freeze() 메서드는 개체를 불변으로 만들 수 있습니다. 그러나 중첩된 개체의 경우 , 가변성을 방지할 수 없습니다. . Object.freeze() 불변성 만 제공할 수 있습니다. 외부 부모 개체에 대해서는 내부 자식(중첩) 개체에 액세스할 수 없습니다.

예시

다음 예에서는 중첩된 개체가 없습니다. Object.freeze() 메소드가 동결을 시도합니다. 전체 개체. 따라서 개체를 고정한 후에도 속성 "이름"에는 변경 사항이 없습니다.

<html>
<body>
   <script>
      const person = {
         "name" : "Suresh",
         "Country" : "India",
         "Designation" : "Mayor"
      }
      document.write("Before freeze the name is" +" "+ person.name );
      document.write("</br>");
      Object.freeze(person);
      person.name = "John";
      document.write("After freeze the name is" +" "+ person.name);
   </script>
</body>
</html>

출력

Before freeze the name is Suresh
After freeze the name is Suresh

중첩된 개체를 고정하려고 할 때 Object.freeze()에 의해 Object.freeze() 때문에 결과가 헛된 것입니다. 중첩된 개체에 액세스할 수 없습니다.

예시

다음 예에서는 개체가 고정되더라도 Object.freeze()에 의해 메서드 중첩 개체의 속성이 변경됩니다.

<html>
<body>
<script>
   const person = {
      "name" : "Suresh",
      "Country" : "India",
      "Designation" : "Mayor",
      "CompaniesOwned" :{
         "Company1" : "Tesla",
         "Company2" : "SolarCity",
         "Company3" : "Spacex"
      }
   }
   document.write("Before freeze " + " " + "Company2 is" + " "+ person.CompaniesOwned.Company2);
   Object.freeze(person);
   document.write("</br>");
   person.CompaniesOwned.Company2 = "Neuralica";
   document.write("After freeze" + " " + "Company2 is" + " "+ person.CompaniesOwned.Company2);
</script>
</body>
</html>

출력

Before freeze Company2 is SolarCity
After freeze Company2 is Neuralica