gpt4 book ai didi

javascript - 创建任何对象(包括深层属性)的只读/不可变副本

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:50:06 24 4
gpt4 key购买 nike

如何在 JavaScript 中创建对象的只读/不可变版本,其属性不能更改?这也应该适用于任何子对象的属性等等。

我遇到的所有执行此操作的方法(Object.definePropertyObject.freeze 等)仅适用于对象的顶级属性,但不适用于对于子对象。

(一个可能的用例:在特定模块中创建/修改一个settingsconfiguration类型的对象后,您需要将它暴露给程序的其余模块以不可变的形式。)

最佳答案

这是我经过深思熟虑后得出的解决方案。可以很好地满足我的需求,所以我想我会分享它的 QnA 风格。如果您发现任何改进/问题,请提出建议。

/**
* Make the the specified object (deeply) immutable or "read-only", so that none of its
* properties (or sub-properties) can be modified. The converted object is returned.
* @param {object} obj Input object
*/
makeImmutable: function makeImmutable (obj) {
if ((typeof obj === "object" && obj !== null) ||
(Array.isArray? Array.isArray(obj): obj instanceof Array) ||
(typeof obj === "function")) {

Object.freeze(obj);

for (var key in obj) {
if (obj.hasOwnProperty(key)) {
makeImmutable(obj[key]);
}
}
}
return obj;
}

编辑:简化了代码。现在也可以正确处理数组。

关于javascript - 创建任何对象(包括深层属性)的只读/不可变副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16064136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com