2012-07-09 3 views
0

공유 객체 (데이터를 저장하는 객체)를 참조하려고 시도하지만 시도 할 때마다 충돌이 발생합니다.참조 공유 객체 AS3

var var1:Object = { value:1 }; 
var varRef:Object = var1; 

if(var1.value == 1) { 
    varRef.value = 50; 
} 

trace(varRef.value); // outputs 50; 
trace(var1.value); // outputs 50; 

을하지만 공유 객체를 사용하려고하면, 그것은 작동하지 않습니다

이 코드

잘 작동합니다.

import flash.net.SharedObject; 
var iapso:SharedObject = SharedObject.getLocal("purchases"); 
var varRef:Object = iapso.data.testing; 

varRef = 90 
trace ("The shared value is " + iapso.data.testing); 
trace ("This should mirror it" + varRef); 

문제를 파악할 수있는 경우 고정 버전을 게시하십시오.

감사합니다.

+0

당신은 점점 어떤 충돌? –

답변

4

포인터를 역 참조 할 수있는 프로그래밍 백그라운드에서 와야합니다.

이 경우 varRefvarRef = &iapso이 아닙니다. 값을 설정해도 iapso.data.testing의 값은 변경되지 않습니다.

처음에는 iapso.data.testing에 대한 포인터로 varRef 설정 :이 값을 설정하지 않습니다

varRef = 90; 

:

var varRef:Object = iapso.data.testing; 

그런 다음 즉시 리터럴 상수 값 객체 90로 변경 testing to 90 -이 값은 varRef으로 변경됩니다.

그런 다음, iapso.datavarRef 설정과 같이 testing을 설정할 수 있습니다 :

var varRef:Object = iapso.data; 
varRef.testing = 90; 

을 그리고, 다음이 예상 생산 된 것입니다 결과 : varRef가 iapso의 값을 업데이트하지 않습니다 설정

trace(iapso.data.testing); // 90 
trace(varRef.testing); // 90 
+0

Jason Sturges 당신은 그것을 다시했습니다! 좋은 대답. – user1508405

2

. 데이터 - 번호는 참조되지 않고 복사됩니다. 당신이 정말로 참조를 사용하려면

var bar:Object = { data:1 }; 
var foo:Object = bar.data; 

trace(foo); //"1" 
bar.data = 2; 
trace(foo); //"1" 

대신 data을 사용, 예 :

import flash.net.SharedObject; 
var iapso:SharedObject = SharedObject.getLocal("purchases"); 
var varRef:Object = iapso.data; 

varRef.testing = 90 
trace ("The shared value is " + iapso.data.testing); 
trace ("This should mirror it" + varRef.testing); 
+0

위대한 대답도 감사합니다! – user1508405