在javascript中使用枚举实现对象的正确方法

在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

我曾经用常用的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(type) {
        this.type = type
    }
}
从我的角度来看,这方面的问题如下:

  • 要构建类,用户还必须导入类型
  • 类型似乎不是ClassA的一部分
我的代码适合Javascript吗?所描述的问题在Javascript中是否正常?有没有更好的方法

我正在努力解决的当前问题是下一个问题

我有几种类型的用户活动表示为对象。它们有许多相似之处,如名称、日期、持续时间等,但必须根据它们的类型进行显示

我的解决方案是为所有对象提供基本字段及其类型

在javascript中使用枚举实现对象的正确方法

这并没有正确的方法,因为在JS中并没有可比的枚举。你只能花越来越多的努力来模拟尽可能接近你所知道的行为。但对我来说,你忽略了你正在发展的语言,只是为了保持你宝贵的小发展程序,而不需要学习新的东西。(这不是针对你个人的,我以前见过。)

我只是简单地将类型作为常量包含到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我也更新了我的答案来解决这个问题。