保护对象结构(3个层次)

什么是保护对象结构?

        禁止对对象添加新属性和删除现有属性;

  • 防止扩展

        禁止给对象添加新属性

        Object.preventExtensions(对象)

原理:其实在每个对象内部都有一个内部属性 extentsible = true; 也就是说所有对象默认都可以随意添加新属性,Object.preventExtensions(对象)会自动将对象内部属性的 extentsible = true改为extentsible = false ;从此该对象禁止添加新属性

//防扩展  禁止为对象添加新属性
var LiLei ={
    sanme: "Li Lei",
    sage:19,
    className:"高三二班"
}
// 禁止为对象添加新属性
Object.preventExtensions(LiLei)
LiLei.Sname="李雷"

console.log(LiLei)

 

  •  密封

        既禁止添加新属性,又禁止删除现有属性  ,但是属性的值是可以随意修改的

        Object.seal(对象)

原理:Object.seal(对象)自动做了两件事情,

自动将对象的内部属性extensible=false,从此该对象禁止添加新属性;

自动将对象中的每个属性的configurable=false,从此该对象禁止删除现有属性,并且自己不用反复写configurable=false了;

//密封  禁止为对象添加新属性 禁止删除现有属性
var LiLei ={
    sanme: "Li Lei",
    sage:19,
    className:"高三二班"
}

Object.seal(LiLei)
LiLei.Sname="李雷" //尝试给对象添加新属性
delete LiLei.className  //尝试给对象删除现有属性

console.log(LiLei)

 

  • 冻结

         既不能添加属性,又不能删除属性,还不能修改任何属性值!

        Object.freeze(对象)

原理:Object.freeze(对象)自动做了三件事情,

自动将对象的内部属性extensible=false;从此该对象禁止添加新属性;

自动将对象内部属性的configurable=false,从此该对象禁止删除任何现有属性;

自动将对象中每个属性的write=false;从此该对象中的任何属性值都为只读禁止修改

冻结使用情景:

如果多个模块共用的对象,应该禁止任何其中一个模块 擅自修改该对象中的属性值。

// 冻结 既不能添加新属性 又不能删除现有属性 还不能修改任何属性值
var LiLei ={
    sanme: "Li Lei",
    sage:19,
    className:"高三二班"
}

Object.freeze(LiLei)
LiLei.Sname="李雷" //尝试给对象添加新属性
delete LiLei.className  //尝试给对象删除现有属性
LiLei.sage=20      //尝试给对象修改属性值

console.log(LiLei)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值