且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

AS3 - 克隆对象

更新时间:2022-06-20 02:57:41

一种选择,可以说是最敏捷的,是定义的克隆方法,你需要克隆每个类,如:

One option, arguably the most agile, would be to define clone methods for each class that you need to clone, such as:

class Ship
{
    public var prop1:Number;
    public var otherClassInstance:OtherClass;
    public function clone():Ship
    {
        var result:Ship = new Ship();
        result.prop1 = this.prop1;
        result.otherClassInstance = this.otherClassInstance.clone()
    }
}

class OtherClass
{
    public var prop1:Number;
    public function clone():OtherClass
    {
        var result:OtherClass = new OtherClass();
        result.prop1 = this.prop1;
    }
}

另一种选择是使用ByteArray类像这个例子从Adobe的文档,以克隆对象:

Another option is to clone an object by using the ByteArray class like this example from the Adobe documentation:

function clone( source:Object ):* 
{ 
    var myBA:ByteArray = new ByteArray(); 
    myBA.writeObject( source ); 
    myBA.position = 0; 
    return( myBA.readObject() ); 
}

我见过的情况下这种方法不适用于自定义类的克隆实例的工作,尤其是视图类,如精灵。

I've seen instances where this approach does not work for cloning instances of custom classes, specifically view classes like Sprites.

另一种方法是使用不如describeType flash.utils 包。随着不如describeType 您可以通过对象的属性迭代。

Another approach is to use describeType from the flash.utils package. With describeType you can iterate through the properties of an object.

下面是一个使用不如describeType 来检查一个对象的属性是的utils LIB 我写的。

Here is an example of using describeType to inspect the properties of an object that is a part of a utils lib I wrote.

至于检查属性的类型,你可以使用不如describeType 或者你也可以使用运营商像这样的:

As for checking the type of the property, you can use describeType or you can also use the is operator like this:

if( myObj is SomeClass )
{

}

if( myObj is OtherClass )
{

}