我正在尝试引用一个共享对象(一个保存数据的对象),但每当我尝试时,我都会崩溃。
此代码可以正常工作:
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)
您必须来自可以取消引用指针的编程背景。
在这种情况下,varRef
不是varRef = &iapso
。设置其值不会更改iapso.data.testing
;
最初,您将varRef
设置为iapso.data.testing
的指针:
var varRef:Object = iapso.data.testing;
然后,您立即将其更改为常量值对象文字90
:
varRef = 90;
这不会将testing
的值设置为90 - 这会更改varRef
的值。
您可以将varRef
设置为iapso.data
,然后将testing
设置为:
var varRef:Object = iapso.data;
varRef.testing = 90;
然后,以下将产生预期结果:
trace(iapso.data.testing); // 90
trace(varRef.testing); // 90
答案 1 :(得分:2)
设置varRef不会更新iapso.data中的值 - 数字被复制,而不是被引用。
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);