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.