Es todo por valor, si entiendes la programación en C, estarás familiarizado con el concepto de los punteros.
Piensa en un puntero como apuntando a algo en la memoria, y todos los nombres de variables "bob from (bob = new person();)" son básicamente punteros con los que trabajas.
Ahora, cuando se declara una función, ya que todos ellos son Por valor
function Test(a:Object, b:Object):void {
a = b;
}
Puede pensar tanto "a" y "b" son los nuevos punteros, por lo que sólo dentro de la función "Prueba" hacer ambos "a" y "b" existen y apuntan a algo en la memoria.
Así que vamos a utilizar es
var s1:Sprite = null;
var s2:Sprite = new Sprite;
Test(s1,s2);
Así que el S1 y punteros s2 siempre apuntará a "nulo" y "una nueva Sprite en la memoria", respectivamente, a menos que sean modificadas como S1 y S2 dentro de su "Alcance "< - Asegúrate de comprender el alcance de la variable incluso antes de intentar abordarlo.
Y dentro de la función ahora tenemos dos nuevos punteros "a" apuntando a "nulo" y "b" apuntando a "el mismo sprite en memoria como s2". Dado que los objetos y las matrices son esencialmente colecciones de punteros y solo se han creado dos punteros nuevos para la función "a" y "b" cualquier propiedad/variable expuesta "punteros a datos en la memoria" de "a" o "b" seguirá siendo exactamente igual a los de "s1" y "s2" y son exactamente los mismos punteros.
Por lo tanto, dentro de la función cuando "a" se configura como "b", realmente todo lo que sucede es que el puntero "a" ahora apunta a lo mismo que "b". Pero "s1" y "s2" aún apuntan a lo que señalaban antes.
!!!! Si fuera por referencia, no sería capaz de pensar en "a" y "b" como nuevos punteros, en realidad serían "s1" y "s2", a menos que los escriba como "a" y "b" ".
Este es mi problema también. Deseo enviar la variable real (b en este ejemplo) a mi función y obtener el cambio de eso por función.http: //stackoverflow.com/questions/13188723/pass-actual-variable-object-to-a-function –
Para que quede claro, el tipo de objeto es irrelevante, porque este tema se refiere a una convención de llamadas. "ByRef (una palabra clave de Visual Basic): especifica que un argumento se pasa de tal manera que el procedimiento llamado puede cambiar el valor de una variable subyacente al argumento en el código de llamada". AS3 no es compatible con eso; siempre pasa argumentos "ByVal". La asignación de un nuevo objeto a un parámetro dentro de una función no hará que la variable pasada al parámetro de esa función apunte al nuevo objeto. El objeto en sí mismo generalmente se puede modificar, pero la variable pasada no se puede modificar dentro del func. – Triynko