Javascript ES6 - 内部枚举 类 像静态枚举一样在外部使用
Javascript ES6 - Enums inside classes used outside like a static enum
我想问一下是否可以添加类似于以下内容的枚举:
STATES = {
WIP: "Work in progress",
ONLINE: "Online",
ONLINE_MODIFIED: "Online, modified",
HIDDEN: "Hidden"
}
在 Class 中,并能够在其他文件中使用它,类似于:object.updateState(Class.STATES.HIDDEN)
,而无需构建新对象,如 boxObject.updateState(new Box().STATES.HIDDEN)
谢谢。
像这样:
export class Foo{}
Foo.SomeStaticEnum={BAR:"bar"};
但导出 const 似乎更合适...
export const FOO={BAR:"bar"};
您可以通过多种方式实现静态数据属性:
使用赋值:
const STATES = {
WIP: "Work in progress",
ONLINE: "Online",
ONLINE_MODIFIED: "Online, modified",
HIDDEN: "Hidden"
};
class Box {};
Box.STATES = STATES;
console.log(Box.STATES.WIP); // Work in progress is the output
使用Object.defineProperty:
当您使用 Object.defineProperty 时,您可以将其设置为只读
const STATES = {
WIP: "Work in progress",
ONLINE: "Online",
ONLINE_MODIFIED: "Online, modified",
HIDDEN: "Hidden"
};
class Box {};
Object.defineProperty(Box, 'STATES', {
value: STATES,
writable: false, // makes the property read-only
});
console.log(Box.STATES.WIP); // Work in progress is the output
使用静态getter:
您可以使用 ES6 static getter 语法在 class 定义中添加 属性。您也可以只定义 getter.
使其成为只读
const STATES = {
WIP: "Work in progress",
ONLINE: "Online",
ONLINE_MODIFIED: "Online, modified",
HIDDEN: "Hidden"
};
class Box {
static get STATES() {
return STATES;
}
}
console.log(Box.STATES.WIP); // Work in progress is the output
综上所述,我同意 。如果您使用的是 ES6 模块,使用命名导出似乎更合适:
export const BOX_STATES = {
WIP: "Work in progress",
ONLINE: "Online",
ONLINE_MODIFIED: "Online, modified",
HIDDEN: "Hidden"
};
export default class Box {};
所以你可以这样导入它:
import { BOX_STATES } from './path-to-box';
console.log(BOX_STATES.WIP); // Work in progress is the output
无需 class
的另一种简单方法
const BOX_STATES = {
WIP: "Work in progress",
ONLINE: "Online",
ONLINE_MODIFIED: "Online, modified",
HIDDEN: "Hidden"
};
module.exports = BOX_STATES;
console.log(BOX_STATES.WIP);
确保您导入或需要您的文件,如上所示。
如果不需要纯ES6,可以使用Typescript,请点赞。 Typescript 有一个很好的 ENUM 和导出选项
示例:
export enum STATES
{
WIP = "Work in progress",
ONLINE = "Online",
ONLINE_MODIFIED = "Online, modified",
HIDDEN = "Hidden"
}
export class SocialMedia
{
static state: STATES = STATES.HIDDEN;
}
console.log(SocialMedia.state);
SocialMedia.state = STATES.WIP;
console.log(SocialMedia.state);
结果:
Hidden
Work in progress
我想问一下是否可以添加类似于以下内容的枚举:
STATES = {
WIP: "Work in progress",
ONLINE: "Online",
ONLINE_MODIFIED: "Online, modified",
HIDDEN: "Hidden"
}
在 Class 中,并能够在其他文件中使用它,类似于:object.updateState(Class.STATES.HIDDEN)
,而无需构建新对象,如 boxObject.updateState(new Box().STATES.HIDDEN)
谢谢。
像这样:
export class Foo{}
Foo.SomeStaticEnum={BAR:"bar"};
但导出 const 似乎更合适...
export const FOO={BAR:"bar"};
您可以通过多种方式实现静态数据属性:
使用赋值:
const STATES = {
WIP: "Work in progress",
ONLINE: "Online",
ONLINE_MODIFIED: "Online, modified",
HIDDEN: "Hidden"
};
class Box {};
Box.STATES = STATES;
console.log(Box.STATES.WIP); // Work in progress is the output
使用Object.defineProperty:
当您使用 Object.defineProperty 时,您可以将其设置为只读
const STATES = {
WIP: "Work in progress",
ONLINE: "Online",
ONLINE_MODIFIED: "Online, modified",
HIDDEN: "Hidden"
};
class Box {};
Object.defineProperty(Box, 'STATES', {
value: STATES,
writable: false, // makes the property read-only
});
console.log(Box.STATES.WIP); // Work in progress is the output
使用静态getter:
您可以使用 ES6 static getter 语法在 class 定义中添加 属性。您也可以只定义 getter.
使其成为只读const STATES = {
WIP: "Work in progress",
ONLINE: "Online",
ONLINE_MODIFIED: "Online, modified",
HIDDEN: "Hidden"
};
class Box {
static get STATES() {
return STATES;
}
}
console.log(Box.STATES.WIP); // Work in progress is the output
综上所述,我同意
export const BOX_STATES = {
WIP: "Work in progress",
ONLINE: "Online",
ONLINE_MODIFIED: "Online, modified",
HIDDEN: "Hidden"
};
export default class Box {};
所以你可以这样导入它:
import { BOX_STATES } from './path-to-box';
console.log(BOX_STATES.WIP); // Work in progress is the output
无需 class
的另一种简单方法const BOX_STATES = {
WIP: "Work in progress",
ONLINE: "Online",
ONLINE_MODIFIED: "Online, modified",
HIDDEN: "Hidden"
};
module.exports = BOX_STATES;
console.log(BOX_STATES.WIP);
确保您导入或需要您的文件,如上所示。
如果不需要纯ES6,可以使用Typescript,请点赞。 Typescript 有一个很好的 ENUM 和导出选项
示例:
export enum STATES
{
WIP = "Work in progress",
ONLINE = "Online",
ONLINE_MODIFIED = "Online, modified",
HIDDEN = "Hidden"
}
export class SocialMedia
{
static state: STATES = STATES.HIDDEN;
}
console.log(SocialMedia.state);
SocialMedia.state = STATES.WIP;
console.log(SocialMedia.state);
结果:
Hidden
Work in progress