ใน JavaScript คุณสมบัติที่ขยายได้ของวัตถุใช้เพื่อระบุว่าคุณสมบัติใหม่ได้รับอนุญาตให้เพิ่มแบบไดนามิกในวัตถุหรือไม่ ในมาตรฐาน ECMASCRIPT 3 วัตถุทั้งหมดสามารถขยายได้ ในมาตรฐาน ECMASCRIPT 5 วัตถุทั้งหมดยังคงขยายได้ตามค่าเริ่มต้น แต่คุณสมบัตินี้สามารถเปลี่ยนแปลงได้โดยการตั้งค่า
ในการตรวจสอบว่าวัตถุสามารถขยายได้หรือไม่คุณสามารถใช้คำสั่ง Object.isextensible ():
การคัดลอกรหัสมีดังนี้:
var o = {x: 1};
console.log (object.isextensible (o)); // true
ในการสร้างวัตถุที่ไม่สามารถขยายได้คุณสามารถใช้คำสั่ง object.preventextensions ():
การคัดลอกรหัสมีดังนี้:
Object.preventExtensions (O)
console.log (object.isextensible (o)); // false
เป็นที่น่าสังเกตว่าเนื่องจากไม่มีคำชี้แจงการดำเนินการแบบผกผันของ Object.preventExtensions () เมื่อวัตถุถูกตั้งค่าเป็นที่ไม่สามารถขยายได้จึงไม่มีวิธีที่จะตั้งค่าให้ขยายอีกครั้ง
ขอบเขตของคำสั่ง Object.PreventExtensions () เป็นวัตถุเองและวัตถุต้นแบบจะไม่ได้รับผลกระทบ หากวัตถุถูกตั้งค่าเป็นที่ไม่สามารถขยายได้คุณสมบัติยังสามารถเพิ่มได้ในแบบไดนามิกในวัตถุต้นแบบของมันและคุณสมบัติที่เพิ่มขึ้นแบบไดนามิกเหล่านี้ยังสามารถสืบทอดได้โดยวัตถุ
Object.seal () และ Object.freeze ()
Object.preventExtensions () ป้องกันคุณสมบัติใหม่จากการถูกเพิ่มในวัตถุแบบไดนามิก นอกเหนือจากการดำเนินการนี้แล้วยังมีการดำเนินการที่เข้มงวดอีกสองครั้งใน JavaScript เพื่อปกป้องวัตถุ: Object.seal () และ Object.freeze ()
ฟังก์ชั่นของ Object.seal () คือการตั้งค่าคุณสมบัติที่กำหนดค่าได้ของคุณสมบัติของวัตถุทั้งหมดเป็นเท็จบนพื้นฐานของ Object.preventExtensions () เช่นเดียวกับ Object.preventExtensions (), Object.Seal () ไม่มีการต่อต้านการสูญเสียดังนั้นวัตถุจึงไม่สามารถกู้คืนได้เมื่อปิดผนึก ใน JavaScript คุณสามารถใช้ Object.issealed () เพื่อสอบถามว่าวัตถุได้รับการปิดผนึกหรือไม่
ฟังก์ชั่นของ Object.freeze () คือการตั้งค่าคุณสมบัติของวัตถุทั้งหมดเป็นแบบอ่านอย่างเดียวตาม Object.seal () เช่น Object.seal () และ Object.preventExtensions (), Object.freeze () ไม่มีการต่อต้านการใช้ดังนั้นวัตถุจึงไม่สามารถกู้คืนได้เมื่อมันเป็น freezen ใน JavaScript คุณสามารถใช้ Object.isfrozen () เพื่อสอบถามว่าวัตถุได้รับ freezen หรือไม่
การคัดลอกรหัสมีดังนี้:
console.log (object.isseleed (o)); // false
Object.seal (O);
console.log (object.isseleed (o)); // true
console.log (object.isfrozen (o)); // false
Object.feeze (O);
console.log (object.isfrozen (o)); // true
ไม่ว่าจะเป็น Object.preventExtensions (), Object.seal () และ Object.freeze () ขอบเขตของการกระทำของมันคือวัตถุเองและวัตถุต้นแบบของวัตถุจะไม่ได้รับผลกระทบ