如何冻结JavaScript中的嵌套对象? [英] How to freeze nested objects in javascript?
本文介绍了如何冻结JavaScript中的嵌套对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我只是偶然发现了Object.freeze()函数.这似乎是一个很好的功能,但是如何使整个对象(包括嵌套对象)不可变?
I just stumbled upon Object.freeze() function. It seems to be a pretty good feature but how to make whole object (including nested objects) immutable?
例如,我可以在此处更改innerProp
:
For example I can change innerProp
here:
const obj = { prop: { innerProp: 1 } };
obj.prop.innerProp = 5;
console.log(obj.prop.innerProp); // 5
是否也可能冻结嵌套对象? (ECMAScript 5/6)
Is it possible do freeze nested objects too? (ECMAScript 5/6)
推荐答案
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;
};
https://github.com/substack/deep-freeze
这是公共领域,因此您不必付出功劳:D
It's public domain so you don't have to give credit :D
这篇关于如何冻结JavaScript中的嵌套对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文