1. 防篡改对象:---一级防备(不允许给对象添加新的属性或者方法)
需求原因:在JavaScript中,对象可以在同一环境中任何地方被修改,而对象一旦被修改,在多人合作的项目时,及其容易造成不可预知的问题,因此,我们需要在一些情况下,去阻止对象属性的可篡改性。
实现方法:ES5为对象提供了一个方法:**Object.preventExtensions(yourObjName) **
后果:一旦使用了上述方法的对象,再篡改对象属性时,在非严格模式下,静默失败,严格模式下会抛出错误。
检验对象是否被禁止篡改:Object.isExtensible(youObjName)
2. 密封对象:---二级防备(在防篡改上同时不允许删除属性或方法)
实现原理:将对象的defineProperty()属性变为false,密封后,增加属性**-->属性值为undefined(即:被忽略),删除属性-->**依然可以访问该属性(即:被忽略),在严格模式下,增删密封对象属性都会抛出错误。
实现方法:Object.seal(yourObjName)
** 检验是否被密封**:Object.isSealed(yourObjName)
3 . 冻结对象 --- 三级防备(不允许重新对象属性---用于顶层封装)
特点:冻结的对象既不可扩展,也是密封的,对象的writable属性设置为false
实现方法:Object.freeze(yourObjName)
检测是否被冻结:Object.isFrozen(yourObjName)