ビルトインObjectUtil.clone()
とObjectUtil.copy()
メソッドに問題がありました。そのため、ByteArrayを使用する代わりにイントロスペクションを使用する独自のバージョンを作成しました。
1つのメソッドは、すべてのプロパティを1つのインスタンスから別のインスタンスにコピーします。
private static const rw:String = "readwrite";
public static function copyProperties(source:Object, target:Object):void {
if (!source || !target) return;
//copy properties declared in Class definition
var sourceInfo:XML = describeType(source);
var propertyLists:Array = [sourceInfo.variable, sourceInfo.accessor];
for each (var propertyList:XMLList in propertyLists) {
for each (var property:XML in propertyList) {
if (property.@access == undefined || property.@access == rw) {
var name:String = property.@name;
if (target.hasOwnProperty(name)) target[name] = source[name];
}
}
}
//copy dynamic properties
for (name in source)
if (target.hasOwnProperty(name))
target[name] = source[name];
}
もう1つは、オブジェクトのすべてのプロパティを新しいインスタンスにコピーすることにより、オブジェクトの完全なクローンを作成します。
public static function clone(source:Object):* {
var Clone:Class = getDefinitionByName(getQualifiedClassName(source)) as Class;
var clone:* = new Clone();
copyProperties(source, clone);
return clone;
}