克隆数组
Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本
Array 类不具有复制数组的内置方法。通过调用不带参数的
concat()
或
slice()
方法,可以创建数组的“浅副本”。在浅副本中,如果原始数组具有对象元素,则仅复制指向对象的引用而非对象本身。与原始数组一样,副本也指向相同的对象。对对象所做的任何更改都会在两个数组中反映出来。
在“深副本”中,还将复制原始数组中的所有对象,从而使新数组和原始数组指向不同的对象。深度复制需要多行代码,通常需要创建函数。可以将此类函数作为全局实用程序函数或 Array 子类的方法来进行创建。
以下示例定义一个名为
clone()
的函数以执行深度复制。其算法采用了一般的 Java 编程技巧。此函数创建深副本的方法是:将数组序列化为 ByteArray 类的实例,然后将此数组读回到新数组中。此函数接受对象,因此既可以将此函数用于索引数组,又可以将其用于关联数组,如以下代码所示:
import flash.utils.ByteArray;
function clone(source:Object):*
{
var myBA:ByteArray = new ByteArray();
myBA.writeObject(source);
myBA.position = 0;
return(myBA.readObject());
}
|
|
|