【问题标题】:How can I access the name of static member of a class in AS3 or JavaScript如何在 AS3 或 JavaScript 中访问类的静态成员的名称
【发布时间】:2011-12-04 16:07:14
【问题描述】:

我有以下课程,我想做 cmets 中的内容 我知道我可以用条件来做到这一点。 我想知道是否有办法做到这一点。

此代码在 AS3 中,但我知道这可能与 javascript 有关,因为 AS3 是基于 ECMAScript

public class ClientStatus 
{
    public static const INVITED:int = 0;
    public static const VIP:int = 1;
    public static const MASTER:int = 2;
    public static const GRAND_MASTER:int = 3;
    public static const IMORTAL:int = 4;
    public static const GOD:int = 5;

    public static function getName(status:int):String
    {
        // to get the name related to int value
        // ex: if status equals to 3 return "GRAND_MASTER"
    }
}

【问题讨论】:

    标签: javascript actionscript-3 static


    【解决方案1】:

    使用describeType,您可以获得ClientStatus 中所有常量的名称。然后,您可以遍历该列表并构建一个字典,如下所示:

    // might have some errors, doing it from my head
    
    private var dic:Dictionary = new Dictionary();
    
    ...
    
    var desc:??? = describeType(ClientStatus);
    ...
    for each (var constName:String in constNames) {
        dic[ClientStatus[constName]] = constName;
    }
    
    ...
    
    public static function getName(status:int):String {
            return dic[status];
    }
    

    【讨论】:

    • 使用 describeType 比手动创建字典有什么优势?
    • @AsTheWormTurns 您不必编写(并维护!)相同的名称和值列表两次(一次相反)。当然,这可能仍然是最实用的课程,因为动态代码,尤其是解析describeType 的返回值,也可以很大。当然,除非您将其作为自己的功能。
    • describeType 会得到静态数据吗?我认为它只会获取类实例的类型数据。由于静态属于类定义而不是任何一个实例,我会怀疑这是否可行。顺便说一句,describeType 返回 xml。
    • @AmyBlankenship describeType 描述了一种类型,因此应该(或至少也可以)在类而不是实例上调用它。在这种情况下,AFAIK 会提供有关静态成员的信息。
    • 静态成员不是数据类型的一部分。如果您创建该类型的实例,则将无法访问这些变量。所以如果 describeType 选择了静态成员,它应该被重命名——它正在做一些不同于名字所说的事情。
    【解决方案2】:

    最简单的方法是拥有一个状态字符串数组:将索引号传递给方法并获得状态字符串。其他有用的结构可能是 Object 和 Dictionary。

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 2018-10-05
      相关资源
      最近更新 更多