今天来看看在JavaScript中如何控制对象的可访问性。对象的可访问性控制在常规业务代码中都用的并不多,一般都是底层框架在用,不过了解一下总是没有坏处的。
不可扩展对象
使用Object.preventExtensions()
方法可以将一个对象设置为不可扩展,不可扩展的对象不能添加新属性,但可以修改或者删除已有属性。
1 | // eslint-disable-line ; |
密封对象
使用Object.seal()
方法可以将一个对象密封,密封后的对象不能添加、删除属性,但可以修改属性的值。
1 | // eslint-disable-line ; |
冻结对象
使用Object.freeze()
方法可以冻结一个对象,冻结后的对象不能添加、修改、删除属性,也不能修改属性的可枚举性、可配置性、可写性。
1 | ; |
总结
特性 | 不可扩展对象 (Object.preventExtensions ) |
密封对象 (Object.seal ) |
冻结对象 (Object.freeze ) |
---|---|---|---|
是否可新增属性 | ❌ | ❌ | ❌ |
是否可修改属性值 | ✅ | ✅ | ❌ |
是否可删除属性 | ✅ | ❌ | ❌ |
是否可更改原型链 | ✅ | ✅ | ❌ |
是否可更改可枚举性 | ✅ | ❌ | ❌ |
是否可更改可配置性 | ✅ | ❌ | ❌ |
是否可更改可写性 | ✅ | ✅ | ❌ |