如何在javascript中冻结嵌套对象?

如何在javascript中冻结嵌套对象?,javascript,Javascript,我刚刚偶然发现了Object.freeze()函数。这似乎是一个很好的特性,但如何使整个对象(包括嵌套对象)不可变 例如,我可以在此处更改innerProp: const obj = { prop: { innerProp: 1 } }; obj.prop.innerProp = 5; console.log(obj.prop.innerProp); // 5 是否也可以冻结嵌套对象?(ECMAScript 5/6) 这是一个公共领域,所以你不必给予信任:D唯一的方法是递归地冻结每个属性:o

我刚刚偶然发现了Object.freeze()函数。这似乎是一个很好的特性,但如何使整个对象(包括嵌套对象)不可变

例如,我可以在此处更改
innerProp

const obj = { prop: { innerProp: 1 } };
obj.prop.innerProp = 5;
console.log(obj.prop.innerProp); // 5
是否也可以冻结嵌套对象?(ECMAScript 5/6)


这是一个公共领域,所以你不必给予信任:D

唯一的方法是递归地冻结每个属性:
o.hasOwnProperty(prop)
没有意义,这意味着在迭代对象的自有属性名称时,该检查没有任何意义。如果(true&&…这不会伤害任何东西,但肯定不是一个有用的条件。自getOwnPropertyNames()以来,deepFreeze(未定义)失败预期对象deepFreeze fn不好。为什么在将o传递给
对象后检查它是否未定义。冻结
?为什么不使用
o==null
而不是
o==undefined
,因为
null
undefined
const obj = { prop: { innerProp: 1 } };

Object.freeze(obj);
for(let key in obj) {
   if(obj.hasOwnProperty(key) && typeof obj[key] === 'object') {
      Object.freeze(obj[key]);
   }
}
obj.prop.innerProp = 5;
console.log(obj); // const obj = { prop: { innerProp: 1 } };
const obj = { prop: { innerProp: 1 } };

Object.freeze(obj);
for(let key in obj) {
   if(obj.hasOwnProperty(key) && typeof obj[key] === 'object') {
      Object.freeze(obj[key]);
   }
}
obj.prop.innerProp = 5;
console.log(obj); // const obj = { prop: { innerProp: 1 } };