0

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

此代码工作正常:

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

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

谢谢。

4

2 回答 2

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
于 2012-07-09T06:53:20.237 回答
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);
于 2012-07-09T06:53:28.880 回答