Mil gracias Joseba, entendi todo y me ayud� a entender algo de los dem�s capitulos. Mil gracias!
Saludos! Jes�s -------------------------------------- http://www.xflash.8k.com Lima-Per� ----- Original Message ----- From: Joseba Alonso <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Thursday, March 07, 2002 5:54 PM Subject: Re: [flashmaestro] Propiedades locales dentro de una funcion. > Hola de nuevo, > > > > > A=function(){ > > var temp=5 > > this.x=temp > > } > > trace(A.temp) > > //no sale nada > > la razon es muy sencilla, ahi estas creando una clase, no un objeto. Por > tanto necesitas instanciarlo para poder acceder a sus propiedades y metodos. > En Flash simplemente no puedes crear una clase con metodos o propiedades > "static" (Que alguien me corrija si me equivoco). Por si no lo sabes se > denomina "static" a toda propiedad o metodo de una clase que se puede llamar > sin instanciar ningun objeto. Por ejemplo todos los metodos y propiedades de > la clase Math son del tipo "static" (Math.PI, Math.random()...etc), cuando > esto ocurre se dice que la clase es "static". > > > Porque si a pesar de crear una llamada no se muestra "temp"?: > > nuevo=new A() > > trace(nuevo.temp) > > //no sale nada > > trace(nuevo.x) > > //s� muestra 5 > > > > En que manera "var" afecta a una propiedad de la funcion y porque por ello > > "temp" se hace un objeto temporal? > > en realidad cuando tu declaras la variable con "var" lo que estas diciendo > que esa variable tiene que eliminarse de la memoria al finalizar el metodo > (en este caso el contructor). Por tanto si pones el "var" delante la > variable sera borrada al final del metodo, sino no. De todas maneras, > temporal o no, tu nunca puedes acceder a ella directamente, ni a trav�s de > las instancias porque "temp" es una variable cuyo �mbito (scope) es el > propio metodo, no de la instancia. Por tanto si, existe por ahi, en alguna > parte, pero tu no puedes acceder a ella directamente. Te pongo un ejemplo: > > A=function(){ > var temp = temp + 5 > this.x=temp; > } > aa = new A(); > trace("Instancia 1 "+aa.x); // 5 > ab = new A(); > trace("Instancia 2 "+ab.x) // Tambi�n 5 > > Aqui como puedes comprobar, al declararla con "var", la variable muere y es > eliminada de la memoria al finalizar el constructor. Por eso la segunda > instancia toma el valor de 5 tambi�n. > > A=function(){ > temp = temp + 5 > this.x=temp; > } > aa = new A(); > trace("Instancia 1 "+aa.x); // 5 > ab = new A(); > trace("Instancia 2 "+ab.x) // 10 > > Como no ha sido declarada, la variable se convierte en permanente para dicho > constructor con lo que al finalizar no es eliminada de la memoria. Y cuando > creas el segundo objeto la propiedad x es 10. Esto demuestra que esta > variable si *existe* pero no se puede acceder a ella directamente. Un > variable solo se "covierte", por asi decirlo, en propiedad cuando se usa la > palabra clave "this", entonces y solo entonces es heredada por todas las > instancias que creas a partir de la clase. > > Un saludo > > Joseba Alonso > Desarrolador Web > www.inproweb.com > www.sidedev.net > > >
