【问题标题】:property introspection within a class in flexflex中类内的属性自省
【发布时间】:2012-01-21 03:48:46
【问题描述】:

我正在构建一个具有一堆属性的类,看起来像这样:

public dynamic class MyClass{

    public var property1:someObject;
    public var property2:someObject2;
    ...
    public var propertyn:someObjectN;

}

每个属性都实现一个通用接口。

我希望能够遍历我的所有属性,并调用接口指定的一些功能,而不必再次打印出每个属性。基本上是这样的:

public function printSomething():String{
        var printStr:String = '';
        for(var property:String in this){
            if(this[property] is IPrintInterface ){
                printStr += (this[property] as IPrintInterface).printFunction();
            }
        }
        return printStr;
    }

这编译得很好,但不打印任何东西。当我单步执行它时,它似乎跳过了循环,好像“this”没有任何属性......有谁知道我在这里缺少什么?

【问题讨论】:

    标签: actionscript-3 apache-flex oop introspection


    【解决方案1】:

    这可能就是你需要的 - Iterate Over An Object In Actionscript 3

    【讨论】:

    • 您的链接包含正确的信息。但是,如果您直接向其添加基本解释,它将是一个更好的答案(我会 +1)。
    • 是的,我不知道。而且我还发现他们的库提供的反射类型很麻烦。它要么必须是技术原因(开销问题),要么他们按原样发货。
    • 是的,这似乎比仅仅列出属性更麻烦......我认为这不起作用,因为“property:String in this”位可能只适用于“Object”类(有人肯定知道吗?)...明天我会尝试一些事情...
    • 我最终使用了这个类。这比我最初的艰难要容易得多。但是我不得不修改它,因为它不起作用(它从“describeType(obj)”中查找“变量”字段,而它似乎应该查找“访问器”字段)
    【解决方案2】:

    它正在跳过循环,因为在您的代码中:

    for(var property:String in this)
    {
      if(this[property] is IPrintInterface )
      {
        printStr += (this[property] as IPrintInterface).printFunction();
      }
    }
    

    您正在将字符串变量(属性)与 IPrintInterface 进行比较,这将返回错误值。

    您需要将属性变量转换为 IPrintInterface 并查看该变量是否解析为 IPrintInterface 实例。

    【讨论】:

    • 它实际上从未进入循环进行比较(基本上,它的行为就像“this”中没有属性一样)。此外,它不比较字符串“property”。但是在“property”中查找 this 的值,并检查它是否是带有“is”的 IPrintInterface,这应该是有效的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2011-03-23
    • 2019-09-06
    • 2015-07-08
    • 2021-07-06
    相关资源
    最近更新 更多