繁体   English   中英

Object.freeze冻结属性? 或如何将属性设置为不可变/只读?

[英]Object.freeze to freeze a property? Or how to set a property to be immutable/read-only?

面向Object.freeze()的文档指出,仅在其原始类型实际上是“对象”的情况下才允许冻结对象。 我正在使用一些JSON数据对象,并希望使用它来将特定属性设置为不可变的(例如uuid,在db中是不可变的)。 Object.freeze()似乎是完美的解决方案,直到:

TypeError: Object.freeze called on non-object

真是

因此,假设我有一个像这样的对象(从JSON解析):

{
    "uuid": "765926c1-911e-49b2-b597-48cf0df59a17",
    "firstName": "Bob",
    "lastName": "Dole"
}

有什么办法可以迫使uuid不变?

是的,您需要使用Object.defineProperty并重新定义uuid属性描述符以使其不可写和不可配置:

Object.defineProperty(obj, "uuid", { configurable: false, writable: false });

configurable: false表示从现在起无法再次定义uuid属性描述符。 也就是说,没有其他句子能够使该属性再次可变。

归根结底, Object.freeze就像一个快捷方式,它迭代给定对象中的所有可枚举属性,并将它们变成不可配置+不可写的属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM