public var lista:Array = new Array(0xFFFF00,0x66FFFF,0x66FF00,0xFF00FF,.......................)
Cuando asignas una propiedad al declararla en una clase el valor se asigna en el prototype del objecto. No se si me explico... El OOP de AS2 solo es una sintaxis diferente a la del AS1 pero el mecanismo interno es el mismo (en AS3 no). La herencia se logra usando lo que se llama el prototype chain[1]. Basicamente si el objeto en si no tiene una propiedad/metodo la va buscando en el prototype de la clase (TestEMP.prototype) a través de la propiedad __proto__ (TestEMP.prototype == instancia.__proto__). El caso es que si el valor esta declarado en el prototype, este se comparte en todas las instancias. Esto no es un problema para tipos-valor como Number o String pero si para tipos referencia como Array. Si lo modificas en una instancia, lo modificas en el prototype y el resto de instancias se ven afectadas. Parecido a una propiedad estatica, como has comentado tú, pero siendo realmente una propiedad de instancia (una propiedad estatica se accederia TempMP.lista). Espero haberme explicado.... Un saludo, Joseba [1] http://www.debreuil.com/docs/ch01_Prototype.htm > -----Mensaje original----- > De: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] En nombre de Daniel Portilla > Enviado el: miércoles, 20 de septiembre de 2006 12:16 > Para: Lista dedicada a Actionscript > Asunto: [ASNativos] Declarar-inicializar o inicializar en constructor > > Hola amigos, sigo haciendo mis pinitos con POO, y dándome > cuenta de que no tengo ni idea. Quería compartir con vosotros > una cosa que he visto, puede ser que por mi ignorancia ya la > conozcáis, pero yo no recuerdo haber leído nada al respecto > en la ayuda de Flash sobre Clases. Bueno si alguien me > ilumina con la razón, se lo agradeceré, sino dejo el caso > "por resolver". > > Estaba diseñando una clase (que hereda de otra) con un > atributo que es un array de colores > > *class TestEMP extends Pregunta{* > * public var lista:Array = new > Array(0xFFFF00,0x66FFFF,0x66FF00,0xFF00FF,.......................)* > * .* > * .* > * mibt = new BotonColor(this,.....) // Le paso al botón > la referencia > del objeto que lo instancia > * > El caso es que dentro de esta clase instancio varios objetos > (similares a botones) que según se van pulsando se cambian > del primer color del array y hacen un: > *miColor = test.lista.shift() // Elimino el primer color > del Array y se lo paso al objeto para colorearlo* > ** > Bueno, hasta aquí todo correcto, el problema lo he visto > cuando he creado otro objeto TestEMP, con sus respectivos > botones de colores. Me he encontrado con que los botones de > colores se coloreaban con los siguientes colores del Array > del objeto anterior. O sea, es como si el atributo lista > fuera STATIC, y lo compartieran todas las instancias de la > clase TestEMP. > > Esto no me servía, así que se me ocurrió cómo solucionarlo y > el caso es que ha funcionado, pero no entiendo muy bien el por qué. > Basta con inicializar el array dentro del constructor del > objeto en lugar de en la declaración del atributo. > > *class TestEMP extends Pregunta{* > * public var lista:Array;* > * * > * function TestEMP(..................){* > * this.lista = new > Array(0xFFFF00,0x66FFFF,0x66FF00,0xFF00FF,.......................);* > ** > Con esto funciona como yo esperaba que funcionara lo > anterior, así que si conocéis el por qué de este tema, > podemos abrir un hilo muy interesante o descubrir un "bug" > interesante. > > Salu2 > ----------------------------------------------------- > ASNativos > www.5dms.com > subscripciones/desubscripciones > http://asnativos.5dms.com > ----------------------------------------------------- > > ----------------------------------------------------- ASNativos www.5dms.com subscripciones/desubscripciones http://asnativos.5dms.com -----------------------------------------------------

