AS3 SharedObject怪异阵列纠缠

时间:2015-09-09 19:19:27

标签: arrays actionscript-3 shared-objects

var so:SharedObject = SharedObject.getLocal("example");
var arr:Array=[1,2,3];
so.data.arr = arr;
so.flush();
trace(so.data.arr); // outputs 1,2,3
arr[2]=5;
trace(so.data.arr); // outputs 1,2,5

如您所见,我仅更新 arr ,但 so.data.arr 也已更新。

如果不是arr [2] = 5,

so.data.arr 不会更新;我写arr = [1,2,5];

似乎 arr so.data.arr 以某种方式链接,但只有当我更新arr中的元素时,才会以不同的方式设置整个arr。

我意外地发现了这个。它为什么这样工作?

我能算一下它每次都这样有效吗?感谢。

1 个答案:

答案 0 :(得分:2)

基本上说数组是通过引用传递的,而不是通过值传递的。这意味着如果您将数组变量分配给另一个,则不会创建新数组。

  

so.data.arr = arr;

表示so.data.arrarr都指向同一个数组对象。这就是为什么修改任何一个将被另一个反映的原因。他们指着同样的事情。但

  

arr=[1,2,5];

会使arr指向其他一些数组对象,请记住[1,2,5]new Array(1,2,5)的简写版本。

这就是为什么在这一行之后他们没有联系到#34;更多。