如何在 Javascript 类中声明只读静态属性? 我试图在 javascript 类中声明只读静态属性,但无法弄清楚如何做到这一点。 普莱赫 除了 Object.defineProperty(obj, prop, Descriptor) 之外的任何解决方案
类似这样的事情...
class KeyHandler {
static readonly KEYS = {
DIRECTOR: 'director',
VISION: 'vision',
ABOUT: 'about',
}
}
最佳答案
同时available in TS ,JS 中没有 readonly
修饰符(至少在 2021 年 6 月)。有a long discussion关于它,但除非我错过了什么,否则它还没有产生任何结果。
您可以防止使用 getter 函数重写属性(如其他答案所示),但您似乎更感兴趣的是防止意外修改值对象。如果是这样,现在可用的一个选项是使用 Object.freeze 来模拟只读:
class KeyHandler {
static KEYS = Object.freeze({
DIRECTOR: 'director',
VISION: 'vision',
ABOUT: 'about',
})
}
引用the docs :
A frozen object can no longer be changed; freezing an object prevents new properties from being added to it, existing properties from being removed, prevents changing the enumerability, configurability, or writability of existing properties, and prevents the values of existing properties from being changed. In addition, freezing an object also prevents its prototype from being changed.
此后,任何修改 KeyHandler.KEYS 内部的尝试都将陷入严格模式。但这不会阻止尝试重新分配此属性:这...
KeyHandler.KEYS = `Now I'm changed!`
...仍然有效。要也禁止这种行为,您必须结合:
const KEYS = Object.freeze({
DIRECTOR: 'director',
VISION: 'vision',
ABOUT: 'about',
});
class KeyHandler {
static get KEYS() { return KEYS }
}
现在尝试重写属性也会引发严格模式:
TypeError: Cannot set property KEYS of class KeyHandler {
static get KEYS() { return KEYS }
} which has only a getter
关于javascript - 如何在 Javascript 类中声明只读静态属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68053267/