2012-07-09 140 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

什麼崩潰你好嗎? – 2012-07-09 06:49:28

回答

4

您必須來自編程背景,指針可以被取消引用。

在這種情況下,varRef不是varRef = &iapso。設置其值不會更改iapso.data.testing的值;

最初,您設置varRef爲指針iapso.data.testing

var varRef:Object = iapso.data.testing; 

然後,立即將其更改爲一個恆定值,對象字面90

varRef = 90; 

這不設置的值testing到90 - 這改變了varRef的值。

您可以設置varRefiapso.data,然後設置testing爲:

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

然後,下面的出品預計業績:

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

Jason Sturges你又做到了!很好的答案。 – user1508405 2012-07-09 15:31:40

2

設置varRef不會更新採購處的值。數據 - 數字被複制,未被引用。

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 2012-07-09 15:32:04