3

在 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复制到新Vector一片空白。

4

2 回答 2

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);

感谢这篇博文

于 2012-04-16T14:32:22.853 回答
0

另一种选择是使用.map(),例如:

function pointCloner(item:Point, index:int, vector:Vector.<Point>):Point {
    return item.clone();
}

var newVector:Vector.<Point> = oldVector.map(pointCloner);
于 2012-04-16T14:54:06.780 回答