从另一个类更新属于一个类的Array

时间:2013-01-27 12:11:12

标签: arrays actionscript-3 oop class object

我很久以前就写过这段代码了,以为我当时就理解了这段代码,但现在我正试图把它包裹起来,看看它是如何工作的......

// Main.as

package {
    public class Main {

        public function Main() {
            var fruit:Array = [];
            UpdateClass.update(fruit);
            trace(fruit); // Traces out the string pushed into it? How??? I think the data would've got lost...
        }

    }
}

// UpdateClass.as

package {
    public class UpdateClass {

        public static function update(array:Array):void {
            array.push("haha, this is not a fruit!");
        }

    }
}

我只是不明白UpdateClass如何设法更新Main的水果阵列?我认为数据会丢失,因为它没有返回新数组?...当我使用字符串和数字尝试时,数据会像预期的那样丢失。

当我写这篇文章时,我不知道我在做什么,但我想尝试理解这背后的逻辑。

谢谢。

2 个答案:

答案 0 :(得分:1)

StringNumber是AS3中的“原始”数据类型,而ArrayMovieClip等其他对象是“复杂”或“参考”数据类型。 / p>

传递基元时,会复制其值,因此修改它不会影响原始值。传递复杂对象时,它实际上是对内存中对象地址的引用,因此您的函数正在修改原始对象。

答案 1 :(得分:0)

当你说使用String和Number:

表示值丢失时,我假设有类似的内容
// UpdateClass.as

package {
    public class UpdateClass {

        public static function update(num:Number):void {
            num = 1;
        }

    }
}

它丢失的原因是因为你有一个对原始对象的引用为num。但是函数更新改变了对另一个包含值“1”的Number对象的引用。对于数组也是如此,如果您将另一个数组分配给传递的引用,如:

// UpdateClass.as

package {
    public class UpdateClass {
        public static function update(array:Array):void {
            array = new Array();
            array.push("haha, this is not a fruit!");
        }

    }
}

但是,由于你只是在传递的引用(push)上调用一个方法,'array'仍然引用原始的Array并更新它。