Object.freeze要冻结一个属性?或者如何将属性设置为immutable/read-only?
Object.freeze to freeze a property? Or how to set a property to be immutable/read-only?
Object.freeze()
的文档声明它只允许冻结原始类型实际上是 "object" 的对象。我正在处理一些 JSON 数据对象,并希望使用它来将特定属性设置为不可变的(例如 uuid,它在数据库中是不可变的)。 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
就像一个快捷方式,它迭代给定对象中的所有可枚举属性,并将它们变成不可配置+不可写的属性。
Object.freeze()
的文档声明它只允许冻结原始类型实际上是 "object" 的对象。我正在处理一些 JSON 数据对象,并希望使用它来将特定属性设置为不可变的(例如 uuid,它在数据库中是不可变的)。 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
就像一个快捷方式,它迭代给定对象中的所有可枚举属性,并将它们变成不可配置+不可写的属性。