2009-04-06 3 views
2

쉬워야합니다. 나는 물건이있다. 나는 그것을 수정하기를 원하지만, 나는 그 전에 내가 갈 수있는 복사본을 저장하고 싶다. 나는 copy = original으로 설정하려고 시도했으나 원본의 속성을 수정하면 사본에도 변경 사항이 표시됩니다. 나는 당신이 할당 할 때 actionscript에서, 그것은 단지 원래의 객체에 대한 참조를 저장하기 때문이라고 가정하고있다. 그래서 나중에 사용하기 위해 원본 객체의 복사본을 저장하는 가장 좋은 방법은 무엇입니까?Actionscript - 참조없는 변수 할당?

답변

3
var newObj:Object = Object(ObjectUtil.copy(oldObj)); 

"지정된 Object를 복사하고이 복사본에 대한 참조를 반환합니다. 복사는 네이티브 직렬화 기법을 사용한다. 이것은 복사 중에 custom 직렬화가 준수되는 것을 의미합니다.이 방법은 설계

을 컬렉션의 요소와 같은 데이터 객체를 복사하는 데 사용되며 TextInput 컨트롤과 같은 UIComponent 객체를 복사하기위한 것이 아닙니다. 특정 UIComponent 객체의 복사본을 만들려면 구성 요소의 하위 클래스를 만들고 clone() 메서드 또는 다른 메서드를 사용하여 복사를 수행 할 수 있습니다. "

http://livedocs.adobe.com/flex/3/langref/mx/utils/ObjectUtil.html#copy()

0
// duplicate any given Object (not MCs) 
Object.prototype.copy = function() 
{ 
    ASSetPropFlags(Object.prototype,["copy"],1); 

    var _t = new this.__proto__.constructor(this) // 

    for(var i in this){ 
     _t[i] = this[i].copy() 
    } 
    return _t 
}; 

사용

x = ["1","2","3",[4,5],[{a:1,b:2}]] 

y = x.copy() 

y[0] = 0 

y[3][0]="d" 

trace(x) 

trace(y) 
+0

이 끔찍한 솔루션이며, 모든 객체는 단지 비트 복잡한 제대로 복사되지 않습니다. 또한 Object 프로토 타입에 추가하는 것은 좋지 않습니다. 나는 심지어 프로토 타입에 아무 것도 추가하는 것이 나쁜 습관이라고 말하기까지 갈 것이다. 그것은 유물보다 더 유물이다. –

3

뭘 찾는 것은보다는 참조로 전달하는 개체의 전체 복사본입니다.

http://www.kirupa.com/forum/showthread.php?p=1897368

function clone(source:Object):* { 
var copier:ByteArray = new ByteArray(); 
copier.writeObject(source); 
copier.position = 0; 
return(copier.readObject()); 

}

당신은 다음과 같이 사용합니다 :

newObjectCopy = clone(originalObject); 

건배 나는 AS3의 새로운 ByteArray 클래스를 사용하여 여기에 대한 답을 발견!

+0

직렬화하기 전에 클래스 별칭을 등록하면 비 직렬화 한 후에 올바른 클래스에 개체를 유지할 수 있습니다. flash.net.registerClassAlias를 참조하십시오. – preaction