Object.freeze()

Object.freeze()

Object.freeze()方法,可以冻结一个对象。被冻结的对象再也不能被修改;不能添加新的属性,不能删除已有属性,不能修改已有属性的值、可枚举性、可配置性、可写性。此外,冻结一个对象后该对象的原型也不能被修改

冻结之后,如果一个属性的值是个对象,则这个对象中的属性是可以修改的,除非它也是个冻结对象。
数组作为一种对象,被冻结,其元素不能被修改。没有数组元素可以被添加或移除。

深冻结

要真正冻结一个对象,需要递归冻结每个类型为对象的属性(深冻结)。
当对象在引用图中不包含任何(循环引用)时,就可以使用递归完成深冻结,否则将触发无限循环。
deepFreeze()的增强将是具有接收路径(例如Array)参数的内部函数,以便当对象进入不变时,可以递归地调用deepFreeze()。你仍然有冻结不应冻结的对象的风险,例如[window]。