• JavaScript中的枚举


    在JavaScript目前的版本中,没有枚举这个概念(当然,ECMA-262第三版中已经将enum作为关键字保留)。
    然而,如同JavaScript中没有class一样,但我们仍然可以通过间接的方式——JSON来实现它。

    如下,我们来定义Week的枚举:
    if(typeof WeekDay == "undefined"){
    var WeekDay = {};
    WeekDay.Sunday = 0;
    WeekDay.Monday = 1;
    WeekDay.Tuesday = 2;
    WeekDay.Wedesay = 3;
    WeekDay.Thursday = 4;
    WeekDay.Friday = 5;
    WeekDay.Saturday = 6;
    }

    测试如下:
    alert(WeekDay.Monday); // -----> Output: 1


    当然,我们有更为直观的方式。以定义DOM文档节点类型为例,定义方式如下:
    if(typeof Node == "undefined"){
    var Node = {
    ELEMENT_NODE: 1,
    ATTRIBUTE_NODE: 2,
    TEXT_NODE: 3,
    CDATA_SECTION_NODE: 4,
    ENTITY_REFERENCE_NODE: 5,
    ENTITY_NODE: 6,
    PROCESSING_INSTRUCTION_NODE: 7,
    COMMENT_NODE: 8,
    DOCUMENT_NODE: 9,
    DOCUMENT_TYPE_NODE: 10,
    DOCUMENT_FRAGEMENT_NODE: 11,
    NOTATION_NODE: 12
    }
    }

      
        测试如下:
    alert(document.nodeType == Node.DOCUMENT_NODE); // -----> Output: true

       说明,以上Node定义可作为纠正IE不支持DOM节点类型常量用(其他主流浏览器均支持)。

    与类C语言类似,以上2个例子的枚举对应属性值均为整形。你可能想到,难道还能定义成别的类型?
       要回答这个问题,得先知道咱们这个枚举实现的原理。前面说到,这里是用JSON来实现的,而JSON可以使用任何类型的值!
       所以,Js中的枚举可以是任何类型的值。以下以String类型为例:

    if(typeof Color == "undefined"){
    var Color = {
    Color1: 'red',
    Color2: 'green',
    Color3: 'white',
    Color4: 'black'
    }
    }
    测试如下:
    alert(Color.Color1); // -----> Output: red
    以更为复杂的类型来定义一个PersonList枚举如下:

    if(typeof PersonList == "undefined"){
    var PersonList = {
    ZhangSan: {
    Id: 1,
    Name: 'ZhangSan',
    Gender: 'man'
    },
    LiSi: {
    Id: 2,
    Name: 'LiSi',
    Gender: 'woman'
    },
    ZhaoWu: {
    Id: 3,
    Name: 'ZhaoWu',
    Gender: 'man'
    }
    }
    }

  • 相关阅读:
    关于有序查找的随笔
    Spring框架(一) 创建bean
    Linux常用命令
    Spring框架(二) bean的歧义性
    java实现图片文字识别的两种方法
    分享基于分布式Http长连接框架代码模型
    分享基于分布式Http长连接框架设计模型
    无限树Jquery插件zTree的使用方法
    分享基于分布式Http长连接框架
    使用vs编译事件来动态发布配置文件
  • 原文地址:https://www.cnblogs.com/Siegel/p/6097141.html
Copyright © 2020-2023  润新知