我的对象包含所有类型的数据
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}}
请帮助!!
答案 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}}
谢谢大家,你激励了我......