【问题标题】:Flash duplication of an Object - Cloning library?对象的闪存复制 - 克隆库?
【发布时间】:2009-05-07 03:09:56
【问题描述】:

这可能是一个非常简单的问题,我只是不知道该怎么做。

我有一个想要复制的对象,但不知道如何去做。这是我的尝试:

var myObj = new ObjectClass();
var duplicate = myObj;
duplicate = null;
myObj.function(); // Error: Null reference

ObjectClass 非常大,继承并创建了它自己的子类,我确信其中可能有一些单例类。

有没有办法轻松复制一些东西?

编辑: 看起来我正在寻找“克隆”,它没有 AS3 功能,而且您显然无法克隆私有数据。有人知道克隆一堆私人数据的库或解决方法吗?

【问题讨论】:

    标签: apache-flex flash actionscript-3 clone


    【解决方案1】:

    我从某个博客中获得了这个 util 功能,不记得从哪里得到的,所以我不能给予信任。但它不适用于位图数据。无论如何,它是:

    public static function copy(o:Object):Object 
    {
        var bytes:ByteArray = new ByteArray( );
        bytes.writeObject( o );
        bytes.position = 0;
        return bytes.readObject( );
    }
    

    用法:
    registerClassAlias("com.tests.TestClass", TestClass); var testCopy:TestClass = TestClass(ObjectUtil.copy(test));

    【讨论】:

    • 啊,是的,这似乎可以解决问题。非常感谢!!似乎来自这个博客:darronschall.com/weblog/2007/08/…
    • 如下所述,它适用于复制公共属性,但不适用于私有属性。
    • 上面的代码是Flex的ObjectUtil.copy()方法的实际实现,所以如果你在Flex中工作,你可以直接使用ObjectUtil类来代替上面的代码。
    • 啊,是的,非常正确。它不会复制私有属性。
    • 您需要为您的 ObjectClass 创建一个自定义克隆函数,这可能会更好。也许通过使用复制工具来克隆公共属性,然后手动克隆私有属性?
    【解决方案2】:

    您可以使用ObjectUtil.copy()(Flex 库)。但你是对的,它不支持私人数据。所以这是在黑暗中拍摄,但我想知道您是否使用ByteArray.writeObject() 将其序列化为 AMF,如果这会复制私人数据?可能值得一试。

    【讨论】:

    • 我刚刚尝试了 ByteArray 方法,但这似乎不起作用。对不起。
    猜你喜欢
    • 2013-04-06
    • 2011-10-17
    • 2013-02-18
    • 2019-11-18
    • 2011-04-15
    • 2011-03-29
    • 2015-01-08
    • 2011-10-21
    • 2017-06-13
    相关资源
    最近更新 更多