【问题标题】:How to know if an object is dynamic in AS3如何知道一个对象在 AS3 中是否是动态的
【发布时间】:2009-04-14 17:50:48
【问题描述】:

在 Action Script 3 中,您可以编写一个定义动态对象的类(MovieClip 和 Object 是两个示例),该对象可以在运行时进行修改。我想知道是否有某种方法(当然是在运行时)可以知道某个对象是否是动态的。

PS:不做这样的事情:

function isDynamic(object) {
    try {
        object.newProperty = 'someValue'
    } catch (e) {
        return false
    }
    return true
}

【问题讨论】:

    标签: apache-flex flash actionscript-3 oop dynamic


    【解决方案1】:

    CookieOfFortune 思路是对的,可惜代码本身有问题,isDynamic 是一个属性,返回的值会是一个 XMLList,其值为一个反映真假值的 String,而不是直接反映真假值的子节点返回一个布尔值。它应该看起来更像这样:

    function isDynamic(object) : Boolean
    {
        var type:XML = describeType(object);
        return type.@isDynamic.toString() == "true";
    }

    【讨论】:

    • 但是如果你想测试动态以避免调用 describeType.. sigh.
    【解决方案2】:

    小心!

    任何时候你想使用 describeType() 函数,please please please 使用变体:

    import mx.utils.DescribeTypeCache;
    var typeDesc:XML = DescribeTypeCache.describeType(object).typeDescription;
    

    重复调用运行时反射机制的性能绝对糟糕。这就是 Adob​​e 发明 DescribeTypeCache 类的原因。

    【讨论】:

      【解决方案3】:

      您可以使用 flash.utils 中的 describeType 以 XML 形式描述对象。以下是对 API 的引用:flash.utils.describeType

      function isDynamic(object) {
          var type:XML = describeType(object);
          if (type.@isDynamic == "true") return true;
          return false;
      }
      

      【讨论】:

      • "如果 (type.isDynamic) 返回 true"。我认为这可以通过“return type.isDynamic”来实现
      【解决方案4】:

      这是一篇很老的帖子,但我会为那些未来的搜索者添加一个选项。

      AS3 有一个内置的方法:

      mx.utils.ObjectUtil.isDynamicObject(yourObject);
      

      阅读更多关于它的信息here

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 2021-09-29
      • 2018-08-01
      • 2010-10-11
      相关资源
      最近更新 更多