Freeze javascript中的嵌套对象如何冻结它?

Freeze javascript中的嵌套对象如何冻结它?,freeze,jscript,nest-nested-object,Freeze,Jscript,Nest Nested Object,我正在尝试冻结javascript嵌套对象。由于我是JS新手,我面临冻结嵌套对象的困难 const obj = { prop: { innerProp: 1 } }; obj.prop.innerProp = 5; console.log(obj.prop.innerProp); // 5 是否可以冻结嵌套对象?您可以使用以下示例冻结嵌套对象 function deepFreeze (o) { Object.freeze(o); if (o === undefined) { return o;

我正在尝试冻结javascript嵌套对象。由于我是JS新手,我面临冻结嵌套对象的困难

const obj = { prop: { innerProp: 1 } };
obj.prop.innerProp = 5;
console.log(obj.prop.innerProp); // 5

是否可以冻结嵌套对象?

您可以使用以下示例冻结嵌套对象

function deepFreeze (o) {
Object.freeze(o);
if (o === undefined) {
return o;
}

Object.getOwnPropertyNames(o).forEach(function (prop) {
if (o[prop] !== null
&& (typeof o[prop] === "object" || typeof o[prop] === "function")
&& !Object.isFrozen(o[prop])) {
  deepFreeze(o[prop]);
}
});

return o;
};
您可以使用它作为处理不可变值的库。此外,在性能方面,尤其是如果您在项目中不断使用不可变变量,这是一个很好的选择,因为
deepFreeze
在性能方面成本更高