package
{
import flash.display.Sprite;
import flash.net.registerClassAlias;
import flash.utils.ByteArray;
import flash.utils.Dictionary;
public class TestByteArrayCopy extends Sprite
{
public function TestByteArrayCopy()
{
registerClassAlias("1111111", TestValue);
registerClassAlias("111111111", Dictionary);
var TestValue = new TestValue();
var key:TestValue = new TestValue();
p.bagItems[key] = new TestValue();
p.bagItems["111"] = new TestValue();
var byte:ByteArray = new ByteArray();
byte.writeObject(p);
byte.position =0;
var o:Object = byte.readObject();
var p2:TestValue = TestValue(o);
trace(p2 is TestValue);
trace(p2);
trace(p2.bagItems[key]);
trace(p2.bagItems["111"]);
}
}
}
import flash.utils.Dictionary;
class TestValue
{
public var bagItems:Dictionary = new Dictionary();
}
在这段代码是我们AS3中 常用的深拷贝
我做了这么一个小测试,得出几个结论:
1:
发现如果 我们不进行registerClassAlias("1111111", TestValue);
这拷贝出来的类对象 无法转换类型
2:
如果我们的对象中有一个Dictionary, 并且这个Dictionary的KEY 为一个对象,
那么我进行深复制后, 这个对象KEY 将一并被复制, 这样我们将无法在从这个Dictionary中通过原来的对象KEY获得 我们想要的值