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

时间:2017-03-29 07:10:20

标签: freeze jscript nest-nested-object

我正在尝试冻结javascript嵌套对象。由于我是JS新手,因此我很难冻结嵌套对象。

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

是否可以冻结嵌套对象?

2 个答案:

答案 0 :(得分:0)

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

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;
};

答案 1 :(得分:0)

您可以使用Immutable.js,这是一个用于处理不可变值的库。此外,就性能而言,尤其是在项目中不断使用不可变变量的情况下,Immutable.js是一个不错的选择,因为deepFreeze的性能代价更高。