代码之家  ›  专栏  ›  技术社区  ›  Richard Haven

自定义元数据和静态函数之间的区别?

  •  3
  • Richard Haven  · 技术社区  · 17 年前

    [MyMetaData(name1=value1, name2=value2)]
    

    -keep-as3-metadata+=MyMetaData
    

    并使用describeType()查找具有该元数据的项目

    var typeDescriptionXML : XML = flash.utils.describeType(aType);
    
    var itemsWithMyMetaData : XMLList = 
        classXML.factory.metadata.(@name == "MyMetaData");
    

    public static function myStaticFunction() : Object
    {
        var result : Object = new Object({name1: "value1", name2: "value2"});
        return result;
    }
    


    职业等级 项目?

    2 回复  |  直到 17 年前
        1
  •  3
  •   James Fassett    17 年前

    我假设使用元数据存在一些性能问题。 describeType

    当然存在与类型相关的问题。甚至你的第二个例子,你发送了一个 Object 非常 这些天我很少用 对象

    public static function myStaticFunction():Object
    {
        return { name1: "value1", name2: "value2" };
    }
    

    package
    {
    public class StaticClass
    {
        private static const SOME_DATA:int = 0;
        private static const SOME_STRING:String = "Hello World";
    
        private static var count:int = 0;
    
        public static function printCount():void
        {
            trace(SOME_STRING, SOME_DATA, count++);
        }
    }
    
    }
    

    我可以想象元数据的用途(例如,用于不需要实现接口的库代码),我也可以理解为什么Flex会为此目的使用它们(例如,构建远程对象、事件、可绑定对象的列表),但我永远不会建议将其用于正常使用。

        2
  •  3
  •   back2dos    17 年前

    我更不同意詹姆斯的看法。然而, 元数据有一个优点:统一访问 ...

    如果你有一个类数组,并且你知道每个类都有一个属性 classMetaData ,则此代码将不起作用:

    for each (var c:Class in arrayOfClass) 
         trace(c.getData());
    

    for each (var c:* in arrayOfClass) 
         trace(c.getData());
    

    但它相当古怪,要求每个类都有静态属性,除此之外 c.getData() 也是类型 * ...

    通过以下方式访问元数据 describeType 总是工作得很好。..可能发生的最糟糕的事情是,你最终会迭代一个空的 XMLList

    您应该使用元数据标签来捕获元数据,使用actionscript来捕获数据

    尔兹