AS3 ByteArray 를 사용 하여 대상 깊이 복사
2488 단어 Flashactionscript
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 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
writeFlashHTML, 주로 Flash 출력에 사용되는 JS 방법입니다.텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.