Arrays AS3共享对象幽灵数组纠缠
如您所见,我只更新了arr,但是so.data.arr也得到了更新 so.data.arr如果不是arr[2]=5,则不更新;我写arr=[1,2,5] 似乎arr和so.data.arr以某种方式链接,但前提是我更新了arr中的一个元素,而不是以不同方式设置整个arr 这是我偶然发现的。为什么会这样Arrays AS3共享对象幽灵数组纠缠,arrays,actionscript-3,shared-objects,Arrays,Actionscript 3,Shared Objects,如您所见,我只更新了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代码>
表示so.data.arr
和arr
都指向同一个数组对象。这就是为什么对其中一个的修改会被另一个反映出来。他们指的是同一件事。但是
arr=[1,2,5]代码>
将使arr
指向其他数组对象,请记住[1,2,5]
是新数组(1,2,5)
的简写版本
这就是为什么在这一行之后,它们不再“链接”了
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