其他分享
首页 > 其他分享> > 保护对象

保护对象

作者:互联网

保护对象:控制对对象的属性值或对象结构进行的随意的篡改。
两个层面:
1、保护对象的属性

es5对对象的属性进行重新的分类:

(1)命名属性:可用.访问到的属性。

又分为:数据属性:实际存储属性值的属性;

访问器属性:不实际存储属性值,仅提供对另一个属性的保护。

保护数据属性:ES5标准中,每个数据属性都是一个微缩的小对象。每个小对象中,保存一个属性值和三个开关。

比如:obj={eid:1001}。eid不再是一个变量而是eid:{value:1001,

writable:false/true, //可写

enumerable:false/true, //可遍历

configurable:false/true //可删除属性/可修改前两个开关

}

如何修改这三个开关属性:Object.defineProperty( 对象名,

"属性名",{

开关:true/false

} )

同时修改多个属性:Object.definProperties( 对象名,{

属性名: {开关:true/false},

属性名:{开关:true/false},

} )

只要设置writable和enumerable,都要同时关闭configurable,目的是禁止修改前两个开关。且configurable一旦被改为false,不可逆!

访问器属性自定义保护数据属性:

访问期刊属性:自己不保存数据,专门提供对其他数据的保护。

 

 

二、保护对象的结构
三个级别:防扩展、密封、冻结

保护结构:防止对对象的结构进行篡改,比如:添加新属性,删除现有的属性 有3个级别

1、防拓展:禁止给对象添加新属性 Object.preventExtensions(对象) 防止对eric的一切扩展 原理: 内部属性: extensible:true preventExtensions将extensible改为false

2、密封:在兼具防扩展的基础上,进一步防止删除现有属性 Object.seal(对象) 将eric密封起来强调:属性值,依然可以修改。 seal原理:自动将所有属性的configurable(可配置的)为false

3、冻结:在密封基础上,进一步禁止修改属性值 何时:今后凡是共用的对象的属性值,不能随便更改 如何:Object.freeze(对象) 原理:自动将所有属性的writable:false

 

标签:false,开关,对象,Object,保护,true,属性
来源: https://www.cnblogs.com/qjf2001109/p/16251124.html