• 我转过几个弯 绕过那个小雨楼
  • 拿着蒲扇摆着衣衫渡着紧箍咒
  • 不问天涯不停留 喝过几壶酒
  • 不过年少白头道义放胸口
  • 倘若明天之后 遥看前尘剑封侯
  • 似那天上神仙无所求
  • 朝朝暮暮君如梦醒十分不为何理由
  • 是真是假是惶恐是无休
  • 路过这风雨花满楼 片刻都不停留
  • 我本这书生进京赶考留下许多愁
  • 你问有没有时候 我叹这天道默悠悠
  • 能否与我一醉方休
  • 又过了几个弯 算尽天量道莫慌
  • 踏这田园闻这芳草香
  • 跌跌撞撞仗剑天涯折煞不枉无笔良
  • 是梦是幻是温柔是家乡
  • 路过这风雨花满楼 片刻都不停留
  • 我本这书生进京赶考留下许多愁
  • 你问有没有时候 我叹这天道默悠悠
  • 能否与我一醉方休
  • 路过这风雨花满楼 片刻都不停留
  • 我本这书生进京赶考留下许多愁
  • 你问有没有时候 我叹这天道默悠悠
  • 能否与我一醉方休
  • 谁能与我一醉方休

Object.freeze() 冻结对象

119 0

const是禁止修改指向,而不是不能改值,由于常量的修改是直接赋值,所以使用const声明的变量是无法修改的。

但是object却是可以修改的,我们可以对这个object对象写入数据,那如果我们要禁止这个对象被读写呢?

我们可以利用Object.freeze()方法来实现。

const obj = {
  one : 1
}

一般我们可以通过obj.one = xx来修改值,现在我们要防止这个值被修改:

const obj = Object.freeze({
  one : 1
})

obj.one = 5;

console.log(obj)  //{one:1}

无法被修改。

但是还有一种情况,就是如果这个one是一个对象呢,几遍我们给obj冻结了,one依旧可以被修改到,所以最好的办法就是进行一次遍历

let obj = {
  one : { two: 2}
}

var freeze = (obj) => {
  Object.freeze(obj);
  Object.keys(obj).forEach((key,i) =>{
    if(typeof obj[key] === "object"){
      Object.freeze(obj[key]);
    }
  });
};

freeze(obj);

通过Object.keys获取到对象所有的key的数组,forEach遍历这个数组,然后判断对象里面key对应的值是否为object,如果是就冻结它。

这样一来对象里面的子级对象就不能被修改了,但是子级里面的子级如果是一个对象,依旧可以被修改,这个就看需求了,真的需要,你在遍历一下也不是不行。设置不行可以用其他办法,我记得有一个Object的方法,即可以拿来做监控,又能禁止写入呢。

2
  • 本文分类:ES6
  • 本文标签:暂无标签
  • 流行热度:已超过 119 人围观了本文
  • 最后更新:2020年04月29日 - 21时56分24秒
  • 发布日期:2020年04月29日 - 21时56分24秒
  • 版权申明:本文系作者@木灵鱼儿原创发布在木灵鱼儿 - 有梦就能远航站点。未经许可,禁止转载。
微信收款码
微信收款码