5.2.2保护结构
3个级别
【1】防扩展
功能:禁止给对象添加新属性
使用:Object.preventExtensions(对象)
问题:只防添加,不防删除
【2】密封
功能:既禁止添加新属性,又禁止删除现有属性
使用:Object.seal(对象)
工作:2件事
i:会自动调用preventExtensions(),先禁止添加
ii:会自动遍历对象中每个属性,自动设置每个属性的configurable:false,所有属性禁止删除。
注意:
如果用了seal(),则既不用写preventExtensions(),又不用写所有的configurable:false
问题:属性值目前还是可以修改的
【3】冻结
功能:既禁止添加和删除属性,又禁止修改一切的属性值
使用:Object.freeze(对象)
工作:3件事
i:会自动调用preventExtensions(),先禁止添加
ii:会自动遍历对象中的每个属性,自动设置每个属性的configurable:false,所有属性禁止删除
iii:会自动遍历对象中每个属性,自动设置每个属性的writable:false,所有属性只读
【4】示例:
"use strict";
var eric={
eid:1001,
wname:"艾瑞克",
salary:15000
}
// 保护结构
// 1.防扩展
// 不再允许向eric对象中添加属性
Object.preventExtensions(eric);
// eric._eid=1000;
// console.log(eric._eid);
// 2.密封
// 2件事,不仅不允许向eric中添加属性,也会自动遍历eric的所有属性,并为其添加configurable:false,不允许删除属性
Object.seal(eric);
// delete eric.eid;
// 3.冻结
// 3件事:不仅防扩展,也密封,还自动遍历eric中所有属性,并为其添加writable:false,不允许修改属性值
Object.freeze(eric);
// eric.eid=1003;