La vez pasada en un tip de Elecash hice la pregunta pero nadie me respondió, "es que no te quieren" me gritaron por ahí, lo sé...
Primero, debo decirles que NO USEN "_global". No les conviene mucho utilizarlo ya que pueden terminar con un código spaghetti y no es muy OOP que digamos. Si quieren algún repositorio global de su aplicación creen un Singleton de su app y ahí generen un modelLocator donde guardar todo eso que necesitan en todos lados.
Lo que hace _global de hecho es algo parecido a un Object.prototype. Siendo en AS1 y AS2 (y en otros lenguajes que sigan un ECMA parecido también) la clase Object la clase del último nivel (clase padre de todas las clases). Si algo seteamos en su prototype esto será heredado a todos sus hijos cual cascada de agua y pues, siendo Object padre de todo, lo que conseguimos es generar elementos globales para toda la aplicación.
Por ejemplo:
Código :
function MiClase(){ } MiClase.prototype.clab = "Cristalab"; trace ((new MiClase()).clab); //devuelve "Cristalab"
Si en caso mi clase "MiClase" no tuviera la propiedad "clab" lo que haría sería buscar en su padre (en este caso Object directamente)
Código :
function MiClase(){ } trace ((new MiClase()).clab); // devuelve undefined porque ni la clase ni el Object tienen la propiedad Object.prototype.clab = "Cristalab!!"; trace ((new MiClase()).clab); // devuelve "Cristalab!!", hereda de Object // Probemos algo más cool: trace (this.clab); // Devuelve "Cristalab!!", hereda de Object trace ((new Sound()).clab); // Devuelve "Cristalab!!", hereda de Object
Entonces podriamos hacer en AS1 para imitar a _global:
Código :
Object.prototype._global = Object.prototype; _global.cristalab = "c-lab"; trace (this.cristalab); // "c-lab"
Eso es todo, espero les sirva para entender que no deben de hacer jeje
Hace ya mucho que no utilizo AS2 o AS1 así que plz revisen mi code que no lo he ni probado. Thanks!
-- fernando
http://twitter.com/fernandoflorez
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por eldervaz el 21 de Diciembre de 2008
Por danyrik el 23 de Diciembre de 2008
Por sindios el 23 de Diciembre de 2008
muchas gracias fernando, complicado pero lo pude entender
Por Otaku RzO el 24 de Diciembre de 2008
Por Elecash el 24 de Diciembre de 2008
Por otro lado un par de apuntes para Elder y Otaku, _root no es TAN dañino a nivel de consumo, el problema es que se pierde la encapsulación. Sobre usar AS1 en Flash Lite, pues no lo hagáis si podéis evitarlo, con clases y AS2 obtendréis los mismos resultados, con buena estructura y un consumo similar de memoria
Un saludo!!
Por neojp el 24 de Diciembre de 2008
Por lo general no uso AS, pero siendo ECMAscript no deberia ser tan diferente (al menos AS1 y 2).
Qué tan factible es usar un objeto global para almacenar los datos de configuracion, es decir.
Código :
En vez de
Código :
Saludos.
Por eldervaz el 24 de Diciembre de 2008
Elecash :
precisamente es eso Elecash
Por fernando el 24 de Diciembre de 2008
Lo que dices es correcto. Lo que sucede es que en javascript por ejemplo tienes un level de código mientras que en flash tienes diversas capas.
Generar un objeto global te sirve para uno de estos niveles pero no será global en otro.
La sintaxis que utilizas es correcta, pero como lo accedes desde cualquier nivel? Para eso esta el Singleton Ya me entendieron eh! que bien!
Por ricardo el 05 de Mayo de 2010
Por IcEWoLF el 09 de Marzo de 2013