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