更改数组中var的数量,不会更改var结果本身?

时间:2011-12-20 08:40:09

标签: arrays actionscript-3

不确定我是否正确询问,但基本上我有一个存储一些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
    }

2 个答案:

答案 0 :(得分:4)

这就是原始人的工作方式。当您将诸如int,Number等原语推送到数组或传递给函数时,它们将按值传递。所以_numArray[0]_no1是不同的东西。改变是一个不影响另一个。

答案 1 :(得分:1)

如果希望数组存储引用而不是值,则需要使用非原始数据类型。原始数据类型包括intuintNumberBooleanString。非原始(复杂)数据类型是其他任何东西。

// 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"
    }
}