保护对象
作者:互联网
保护对象:控制对对象的属性值或对象结构进行的随意的篡改。
两个层面:
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