1.防扩展:
1.1什么是: 禁止给对象添加新属性
1.2如何:
Object.preventExtensions(对象)
// 阻止 扩展
1.3问题: 只防添加,不防删除
2.密封:
2.1什么是:
既禁止添加新属性,又禁止删除现有属性
2.2如何:
Object.seal(对象)
//密封
2.3 seal做了2件事:
- 会自动调用preventExtensions(),先禁止添加
- 会自动遍历对象中每个属性,自动设置每个属性的configurable:false,所有属性禁止删除。
2.4强调:
- 如果用了seal(),则既不用写preventExtensions(),又不用写所有的configurable:false。
- 虽然用了seal(),虽然不能添加删除属性,但是属性值还是可以修改的。
2.5一般,保护到密封级别就够了!
3.冻结:
3.1什么是:
既禁止添加删除属性,又禁止修改一切属性值。
3.2如何:
Object.freeze(对象)
// 冻结
3.3 3件事:
- 会自动调用preventExtensions(),先禁止添加
- 会自动遍历对象中每个属性,自动设置每个属性的configurable:false,所有属性禁止删除。
- 会自动遍历对象中每个属性,自动设置每个属性的writable:false,所有属性只读