Object.freeze()
的文档声明它只允许冻结对象,如果它的原始类型实际上是" object"。我正在使用一些JSON数据对象,并希望使用它来设置特定属性是不可变的(例如uuid,它在db中是不可变的)。 Object.freeze()
似乎是完美的解决方案,直到:
TypeError: Object.freeze called on non-object
织补。
所以,假设我有一个对象(从JSON解析),就像这样:
{
"uuid": "765926c1-911e-49b2-b597-48cf0df59a17",
"firstName": "Bob",
"lastName": "Dole"
}
有什么办法可以强迫uuid不变吗?
答案 0 :(得分:17)
是的,您需要使用Object.defineProperty
并重新定义uuid
属性描述符,使其不可写且不可配置:
Object.defineProperty(obj, "uuid", { configurable: false, writable: false });
configurable: false
表示从现在开始uuid
属性描述符无法再次定义。也就是说,没有其他句子可以让财产再次变异。
在一天结束时,Object.freeze
就像一个快捷方式,它迭代给定对象中的所有可枚举属性,并将它们转换为不可配置的+不可写的属性。