AS3克隆一个对象

时间:2014-05-15 15:48:07

标签: actionscript-3

我的对象包含所有类型的数据

var obj1:Object={boo:true,num:0,str:"me",arr:[0,"me2",[0,1]],mc:myMc,obj:{boo:false,num:0,str:"me3",arr:[0,"me4",[0,1]]}};

当我使用obj2 ByteArray并使用writeObject(obj1)将此对象克隆到readObject()obj2.mc属性,一切都很好,除了addChild(new obj2.mc) //TypeError: Error #1007: Instantiation attempted on a non-constructor. mc 是一个变量,用于保存库中影片剪辑的链接,其类设置为 myMc )无法添加到舞台,

{{1}}

请帮助!!

2 个答案:

答案 0 :(得分:1)

您无法轻松复制影片剪辑。它应该类似于:

var objectClass:Class = Object(obj2.mc).constructor;
var instance:MovieClip = new objectClass() as MovieClip;

如果传递一个Class而不是实例,会容易得多。在你的情况下,那应该是myMc - 库中对象的类名,对吗?

如果是这样,您可以直接实例化它:var instance:MovieClip = new myMc();

要记住的重要思想是你不需要持有对实例的引用,而是需要对类进行引用!

答案 1 :(得分:0)

伙计经过2个小时的实验,我得出了这个,这只是完美的解决方案......我改为使用ByteArray,而不是var obj1:Object={mc:myMc,bo:true,num:0,str:"me",arr:[myMc,true,0,"me2",[0,1,[0,1]]],obj:{mc:myMc,bo:false,num:0,str:"me3",arr:[myMc,true,0,"me4",[0,1]]}}; var obj2:Object=clone(obj1); function clone( source:Object ):* { var myOBJ:Object=new Object(); for (var property in source) { if (source[property] is Array) { myOBJ[property]=clone(source[property]); } else { myOBJ[property]=source[property]; } } return (myOBJ); } ,它将obj2中的每个变量写入其对应的值obj1,但是面临另一个问题:当我在obj2中更改数组时,我发现obj1中的数组也被更改,这意味着在编写obj2的变量时,数组只被引用到obj1的数组..所以我不得不循环遍历数组单独写一个数组中的每个值..

{{1}}

谢谢大家,你激励了我......