不确定我是否正确询问,但基本上我有一个存储一些var(int / numbers)的数组。当我循环遍历数组改变var的数字时,最后数字似乎仍未改变。基于以下代码,您可以更好地了解我所说的内容。
private var _numArray:Array = new Array()
private var _no1:int
private var _no2:int
public function Main():void
{
_no1 = 10
_no2 = 20
_numArray.push(_no1)
_numArray.push(_no2)
while (_numArray.length)
{
_numArray[0] = 0
_numArray.splice(0, 1)
}
trace(_no1, _no2) // still returning 10 , 20
}
答案 0 :(得分:4)
这就是原始人的工作方式。当您将诸如int,Number等原语推送到数组或传递给函数时,它们将按值传递。所以_numArray[0]
和_no1
是不同的东西。改变是一个不影响另一个。
答案 1 :(得分:1)
如果希望数组存储引用而不是值,则需要使用非原始数据类型。原始数据类型包括int
,uint
,Number
,Boolean
和String
。非原始(复杂)数据类型是其他任何东西。
// SpecialNumber.as
public class SpecialNumber
{
public var value:Number;
public function SpecialNumber(value:Number)
{
this.value = value;
}
}
// Main.as
public class Main
{
public function Main()
{
var no1:SpecialNumber = new SpecialNumber(5);
var no2:SpecialNumber = new SpecialNumber(10);
var array:Array = [no1, no2];
array[0].value += 10;
array[1].value += 60;
trace(no1.value, no2.value) // Output is "15 70"
}
}