如何冻结JavaScript中的嵌套对象? [英] How to freeze nested objects in javascript?

查看:39
本文介绍了如何冻结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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆