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.