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