AS3 SharedObject 幽灵般的数组纠缠
AS3 SharedObject spooky array entanglement
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 也更新了。
so.data.arr 不更新,如果不是 arr[2]=5;我写 arr=[1,2,5];
似乎 arr 和 so.data.arr 以某种方式链接,但前提是我更新了 arr 中的元素,而不是以不同的方式设置整个 arr。
这是我无意中发现的。为什么会这样?
我能算每次都这样用吗?谢谢
基本上来说,数组是按引用传递的,而不是按值传递的。这意味着如果您将一个数组变量分配给另一个数组变量,您并没有创建一个新数组。
so.data.arr = arr;
表示so.data.arr
和arr
都指向同一个数组对象。这就是为什么对任何一个的修改都会被另一个反映出来的原因。他们指着同一件事。但是
arr=[1,2,5];
将使 arr
指向其他数组对象,请记住 [1,2,5]
是 new Array(1,2,5)
.
的简写版本
这就是为什么在该行之后它们不再 "linked"。
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 也更新了。
so.data.arr 不更新,如果不是 arr[2]=5;我写 arr=[1,2,5];
似乎 arr 和 so.data.arr 以某种方式链接,但前提是我更新了 arr 中的元素,而不是以不同的方式设置整个 arr。
这是我无意中发现的。为什么会这样?
我能算每次都这样用吗?谢谢
基本上来说,数组是按引用传递的,而不是按值传递的。这意味着如果您将一个数组变量分配给另一个数组变量,您并没有创建一个新数组。
so.data.arr = arr;
表示so.data.arr
和arr
都指向同一个数组对象。这就是为什么对任何一个的修改都会被另一个反映出来的原因。他们指着同一件事。但是
arr=[1,2,5];
将使 arr
指向其他数组对象,请记住 [1,2,5]
是 new Array(1,2,5)
.
这就是为什么在该行之后它们不再 "linked"。