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.