在AS3中,我们可以通过两种方式复制Array:
newArr = oldArr.concat();
或
var ba:ByteArray = new ByteArray();
ba.writeObject(oldArr);
ba.position = 0;
newArr = ba.readObject() as Array;
但是当我需要复制具有复杂数据类型的Vector时,这两种方式不能与Vector一起使用。就像Vector.<Point>
。当我使用ByteArray复制具有复杂数据类型的Vector时,编译器说新的Vector我将旧的复制到null。
答案 0 :(得分:3)
在将对象写入flash.net.registerClassAlias
之前,请使用ByteArray
注册类别名,例如:
var points:Vector.<Point> = new Vector.<Point>();
var pointsCloned:Vector.<Point>;
var ba:ByteArray = new ByteArray();
registerClassAlias("flash.geom.Point", Point);
points.push(new Point(1, 2));
points.push(new Point(3, 4));
points.push(new Point(5, 6));
ba.writeObject(points);
ba.position = 0;
pointsCloned = ba.readObject() as Vector.<Point>;
trace(points);
trace(pointsCloned);
感谢blog post!
答案 1 :(得分:0)
另一种选择是使用.map()
,例如:
function pointCloner(item:Point, index:int, vector:Vector.<Point>):Point {
return item.clone();
}
var newVector:Vector.<Point> = oldVector.map(pointCloner);