Actionscript 3 AS3克隆对象

Actionscript 3 AS3克隆对象,actionscript-3,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]]}}; 当我使用ByteArray和writeObject(obj1)以及readObject()属性将此对象克隆到obj2时,除了obj2.mc(mc是一个变量,用于保存库中的电影剪辑链接,该库的类设置为myMc)无法添加到舞

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

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]]}};
当我使用
ByteArray
writeObject(obj1)
以及
readObject()
属性将此对象克隆到
obj2
时,除了
obj2.mc
mc是一个变量,用于保存库中的电影剪辑链接,该库的类设置为myMc)无法添加到舞台

addChild(new obj2.mc)
//TypeError: Error #1007: Instantiation attempted on a non-constructor.

请帮帮我

复制电影剪辑不能那么容易。它应该类似于:

var objectClass:Class = Object(obj2.mc).constructor;
var instance:MovieClip = new objectClass() as MovieClip;
如果您传递一个类而不是一个实例,那么这会容易得多。在您的例子中,应该是
myMc
——库中对象的类名,对吗

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


需要记住的重要一点是,您不需要持有对实例的引用,而是持有对类的引用

伙计们,经过两个小时的实验,我得出了这个结论,这简直是完美的解决方案。。。我改用了另一种方法,而不是使用
ByteArray
,即将obj2中的每个变量写入obj1中相应的值,但面临另一个问题:当我更改obj2中的数组时,我发现obj1中的数组也发生了更改,这意味着在写入obj2的变量时,数组仅引用obj1的数组。。所以我必须循环数组,将每个值分别写入一个数组

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.mc()?实例化时不需要括号,这不是问题。是的,对象在库中,它的类是myMc,是的,我不需要在obj1中保存对mc这样的实例的引用,这就是为什么我可以直接使用addChild(new myMc)的原因,但我将myMc引用到mc的原因是,在我的项目中有多个对象obj1、obj2、ob3等,每个对象都包含mc,每个mc引用不同的MovieClip类,因此当我调用addChild(new obj.mc)时,很容易获得不同的结果..嗯,如果你不需要ByteArray,然后我强烈推荐使用工厂设计模式:)它将是一个简单的类,可以创建这样一个对象,因此它可以创建相同的对象。无论如何,我现在理解了您的想法和解决方案,因为通过属性进行循环是非常直接的,因此是正确的:)干杯,当您自己找到解决方案时,乐趣是最好的!:)我的问题是我擅长直接在Flash中编写脚本,我不知道如何使用类或流畅地操作它们,我更喜欢我的项目只有一个文件,没有外部类文件。。就这样..哦,我明白。。但我的建议是,花一两周的时间来检查课程是如何运作的,以及如何设计课程——这对你来说会容易得多:)我会接受你的建议,潜心学习这些课程