JavaScript---高级技巧---对象防篡改

1,479 阅读1分钟

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)