参考共享对象AS3

时间:2012-07-09 06:24:59

标签: actionscript-3 flash actionscript

我正在尝试引用一个共享对象(一个保存数据的对象),但每当我尝试时,我都会崩溃。

此代码可以正常工作:

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);

如果您能够找出问题,请发布固定版本。

感谢。

2 个答案:

答案 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);