我相信@Constantiner 是在正确的轨道上,但我认为他的解释缺乏细节;所以我将尝试更深入地解释一下;据我所知。如果我错了,你们可以纠正我。
如文档中所述:
在 ActionScript 3.0 中,所有参数都通过引用传递,因为所有值都存储为对象。但是,属于基本数据类型(包括 Boolean、Number、int、uint 和 String)的对象具有特殊的运算符,使它们的行为就像按值传递一样。
因此,ArrayCollection 绝对是一个对象,而不是原始类型,因此它应该通过引用传递,并且就像通过引用传递一样。但是,您对 ArrayCollection 的引用变量是什么。从概念上讲,它只是一个指向包含实际 Collection 数据的内存空间的指针。这是我对一些 ASCII 艺术的尝试:
|---|
ac1(variable)--> | | (ActualArrayCollection1)
|---|
|---|
ac2(variable)--> | | (ActualArrayCollection2)
|---|
重复一遍,ac1variable 是指向某个内存空间的指针。ac2variable 是指向一些不同内存空间的指针。当您将其中一个作为参数传递给方法时,它是通过引用传递的。所以,在方法内部,你有这样的东西:
ac1(variable)--> |---|
ac1(argument)--> | | (ActualArrayCollection1)
|---|
ac2(variable)--> |---|
ac2(argument)--> | | (ActualArrayCollection2)
|---|
所以 ac1variable 和 ac1argument 都指向同一个内存空间;因为它们每个都包含相同的指针值。然而,ac1variable 和ac1argument 实际上持有不同的内存空间。他们不一样。
当方法运行此行时:
_ac2 = _ac1;
你会得到这样的东西:
ac1(variable)--> |---|
ac1(argument)--> | | (ActualArrayCollection1)
ac2(argument)--> |---|
ac2(variable)--> |---|
| | (ActualArrayCollection2)
|---|
当方法执行结束时,两个参数消失,原始指针变量保持不变。如果你想在方法中进行这样的直接赋值,你可以使用 this 关键字访问全局变量。这应该这样做:
this._ac2 = _ac1;
当然,如果您正在访问类级变量,这可能会破坏方法内部封装的目的。
我相信编译器设计方面的专家会在早餐时吃掉这个然后吐出来。我希望我的 ASCII 艺术在多个浏览器 / 机器 / 操作系统 / 等上是一致的。