AS3 ByteArray 를 사용 하여 대상 깊이 복사

2488 단어 Flashactionscript
ActionScript 3 에서 새로 제공 하 는 ByteArray 클래스(flash.utils.BiteArray)를 사용 하면 대상 의 깊이 있 는 복사 본 을 만 들 수 있 습 니 다."깊이'는 대상(object)의 모든 인용 을 복사 할 수 있다 는 뜻 이다.이 는 대상 을 포함 하 는 배열 을 복사 하면 배열 의 대상 도 복사 된다 는 뜻 이다.다음은 clone 방법 입 니 다.
ActionScript 코드:
functionclone(source:Object):*{
varcopier:ByteArray=newByteArray();
copier.writeObject(source);
copier.position=0;
return(copier.readObject());
}
메모:flash.utils.BiteArray 를 먼저 가 져 와 야 합 니 다.
이 방법 을 사용 하려 면 아래 코드 를 사용 할 수 있 습 니 다.
ActionScript 코드:
newObjectCopy=clone(originalObject);
이 방법 은 대상 을 깊이 복사 할 수 있 지만 복사 류 의 유형 정 의 는 함께 하지 않 습 니 다.따라서 MyClass 인 스 턴 스 를 복사 해 야 한다 면 복사 대상 은 MyClass 형식 이 아 닙 니 다.이 방법 은 일반 대상 에서 사용 하 는 것 이 가장 좋다.
다음은 제 테스트 코드 입 니 다.
importflash.utils.ByteArray;
flash.utils.getQualifiedClassName;
vara1:Array=[1,2,3];
vara2:Array=clone(a1);//  a1,a2     a1    , a1        
vara3:Array=a1;//  a1   ,  a3   a1
a1.push(4);//  a1  
trace(a1);//  1,2,3,4
trace(a2);//  1,2,3
trace(a3);//  1,2,3,4
trace("===============");
varaa1:Array=[1,2,3];
varaa2:Array=[11,22,aa1]//aa2       aa1
varaa3:Array=clone(aa2);//  aa2,aa3     aa2    ,aa2  aa1     
trace(aa1);//  1,2,3
trace(aa2);//  11,22,1,2,3
aa1.push(4);//  aa1  
trace(aa2);//  11,22,1,2,3,4
trace(aa3);//  11,22,1,2,3
trace(getQualifiedClassName(aa2));//  Array
trace(getQualifiedClassName(aa3));//  Array,    Array            Array    
trace("===============");
varaaa1:MyClass=newMyClass();//         
varaaa2=clone(aaa1);//       
trace(aaa2.a);//  1
trace(getQualifiedClassName(aaa2));//  Object,   aaa2 MyClass     
functionclone($source:Object):*
{
var_copier:ByteArray=newByteArray();
_copier.writeObject($source);
_copier.position=0;
return_copier.readObject();
}
MyClass.as   

package{
publicclassMyClass{
publicvara:int=1;
publicvarb:int=2;
publicfunctionMyClass(){}
}
}

주의:
aaa 2 에 형식 을 강제로 바 꿀 수 없습니다.아래 문 구 를 사용 하면:
varaaa2=MyClass(clone(aaa1));

잘못 보고 할 수 있다.
TypeError:Error\#1034:형식 을 강제로 바 꾸 는 데 실 패 했 습 니 다:Object@138c0341MyClass 로 전환 합 니 다.
atDeepObjectCopieswithByteArray_fla::MainTimeline/DeepObjectCopieswithByteArray_fla::frame1()
as 문 구 를 사용 하여 변환 하면 aaa 2 값 은 null 입 니 다.

좋은 웹페이지 즐겨찾기