14.2 Object Extensibility
extensible คือ attribute ที่ระบุว่าสามารถเพิ่ม property ใหม่ให้กับ object ได้หรือไม่
- Object ปกติจะมีค่าเป็น true
- Object.isExtensible() ใช้เช็คว่า object เป็น extensible หรือไม่
- Object.preventExtensions() ใช้ตั้งค่า extensible ให้เป็น false
- การเพิ่ม property ให้ object ที่มี extensible เป็น false หรือเปลี่ยนค่า prototype จะทำให้เกิด TypeError
- ไม่สามารถเปลี่ยน extensible จาก false มาเป็น true ได้
- แต่ยังสามารถเพิ่ม property ให้ prototype ได้
Sealed Object
ใช้ Object.seal()
- Extensible จะเป็น false
- property ตรงของ object ทั้งหมดจะกลายเป็น nonconfigurable.
- ทำให้ไม่สามารถลบหรือ config ค่า property ได้
- ไม่สามารถเปลี่ยนกลับได้
- Object.isSealed() ใช้เช็คสถานะ
Freezed Object
object.freeze()
- ทำให้ไม่สามารถเปลี่ยนแปลงค่า value property ได้
- accessor property ที่มี function set ยังทำงานปกติ
- Object.isFrozen() ใช้เช็คสถานะ
Object.preventExtensions() , Object.seal() , และ Object.freeze() จะคืนค่าเป็น object ที่ส่งเข้าไปดังนั้นจึงใช้ซ้อนกันได้ ทั้งหมดไม่มีผลต่อ proprototype
let o = Object.seal(Object.create(Object.freeze({x: 1}), {y: {value: 2, writable: true}}));
Comments
Post a Comment