Одним из вариантов, возможно, наиболее гибким, будет определение методов клонирования для каждого класса, который необходимо клонировать, например:
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:
function clone( source:Object ):*
{
var myBA:ByteArray = new ByteArray();
myBA.writeObject( source );
myBA.position = 0;
return( myBA.readObject() );
}
Я видел случаи, когда этот подход не работает для клонирования экземпляров пользовательских классов, особенно для просмотра классов, таких как Sprites.
Другой подход заключается в использовании describeType
из пакета flash.utils
. С describeType
вы можете перебирать свойства объекта.
Вот пример использования describeType
для проверки свойств объекта, который является частью utils lib , который я написал.
Что касается проверки типа свойства, вы можете использовать describeType
или оператор is
, например, так:
if( myObj is SomeClass )
{
}
if( myObj is OtherClass )
{
}