在javascript中使用枚举实现对象的正确方法
我曾经用常用的OOP语言(如swift或java)创建具有type属性的类:在javascript中使用枚举实现对象的正确方法,javascript,enums,Javascript,Enums,我曾经用常用的OOP语言(如swift或java)创建具有type属性的类: struct ClassA { enum Type { case b, c, d } var type: Type } 然后像这样使用它 let a = ClassA(type: .b) 在es6中,类似结构将为: const Type = { a: 0, b: 1, c: 2, } class ClassA { constructor
struct ClassA {
enum Type {
case b, c, d
}
var type: Type
}
然后像这样使用它
let a = ClassA(type: .b)
在es6中,类似结构将为:
const Type = {
a: 0,
b: 1,
c: 2,
}
class ClassA {
constructor(type) {
this.type = type
}
}
从我的角度来看,这方面的问题如下:
- 要构建类,用户还必须导入类型
- 类型似乎不是ClassA的一部分
A类{
构造函数(类型){
this.type=type
}
}
对象。定义属性(类别A{
类型_A:{可枚举:true,值:0},
类型_B:{可枚举:true,值:1},
类型_C:{可枚举:true,值:2},
});
让实例=新的ClassA(ClassA.TYPE_A);
或者,您可以查看一下wich在编译时具有枚举
有没有更好的方法来解决我的问题中描述的问题,而不是模拟枚举?
我有几种类型的用户活动表示为对象。它们有许多相似之处,如名称、日期、持续时间等,但必须根据其类型显示 我的解决方案是为所有对象提供基本字段及其类型 这里不能给你一个很好的答案,因为这仍然太宽泛了。我不确定,“活动”听起来像是行为,但从属性来看,我宁愿认为我们只是在谈论数据。。。以及它们是如何处理的
我不确定我是否会为此实现一个类,而不仅仅是使用普通对象文本/json。为了使其更具可读性,请将类型转换为字符串。经典情况如下所示:
class ClassA {
constructor(type) {
this.type = type;
}
}
ClassA.TYPE_A = 0;
ClassA.TYPE_B = 1;
ClassA.TYPE_C = 2;
var instance = new ClassA(ClassA.TYPE_B);
如果确实需要,您可以使用do定义固定的只读属性,而不是普通属性
ES3语法中的等效代码更短,更切题,IMHO
function ClassA(type) {
this.type = type;
}
ClassA.TYPE_A = 0;
ClassA.TYPE_B = 1;
ClassA.TYPE_C = 2;
var instance = new ClassA(ClassA.TYPE_B);
您可以将
Type
设置为ClassA
的属性,但这并不是更好的方法。@Ryan,确切地说,认为这很好,但在本例中,对象枚举至少是ClassA的一部分。不要让ES6类
语法欺骗您。这是语法糖。Javascript中没有类。从来没有,将来也不会。与其试图模仿其他语言的特定行为,不如解释一下你想解决的问题。这似乎是解决我问题的好办法。谢谢你的澄清。还有一个问题——有没有更好的方法来解决我问题中描述的问题,而不是模拟枚举?@VladHatko我也更新了我的答案来解决这个问题。