在看VUE官方文档讲到data的时候有提到这样一句话:

这里唯一的例外是使用 Object.freeze(),这会阻止修改现有的 property,也意味着响应系统无法再追踪变化

所以记录一下Object.freeze()的作用.
Object.freeze()方法可以冻结一个对象

一个被冻结的对象再也不能被修改

  • 不能添加新属性
  • 不能删除已有属性
  • 不能修改已有属性的可枚举性、可配置性、可写性
  • 不能修改已有属性的值
  • 不能修改原型

总的来说跟const声明一个常量差不多,但是我们使用const声明一个对象时,该对象里面的属性仍然可以被修改的。所以,如果你想禁止一个对象的修改就可以用Object.freeze()

const obj = {
  one: 1,
  person: {
    age:18
  }
}
Object.freeze(obj);
obj.one = 2
obj.person.age = 99
console.log(obj);//{ one: 1, person: { age: 99 } }

从上述代码中可以知道,我们尝试将one这个属性修改成2,但是最后打印出来的值仍然是1。需要注意的一点是,person这个对象根本没有被冻结,仍然可以修改它的age属性,所以这个也叫“浅冻结”,与浅克隆的意义相近。

问题:如何实现递归深冻结??后续贴代码

Logo

前往低代码交流专区

更多推荐