2

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

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

是否可以冻结嵌套对象?

4

2 回答 2

0

您可以使用Immutable.js,它是一个用于处理不可变值的库。此外,在性能方面,特别是如果您在项目中经常使用不可变变量,Immutable.js是一个不错的选择,因为deepFreeze在性能方面成本更高。

于 2020-01-28T14:17:28.803 回答
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;
};
于 2017-03-29T07:12:52.410 回答