Perfecto!! limpio, sencillo y funciona a la perfeccion, como a mi me gustan estas cosas ;) Entre tanta prueba, no habia escrito bien el Delegate, me extrañaba que no funcionase. Muchas gracias, tomo nota de la lección.
----- Original Message ----- From: "Joseba Alonso" <[EMAIL PROTECTED]> To: "'Lista dedicada a Actionscript'" <[email protected]> Sent: Friday, May 11, 2007 1:41 PM Subject: Re: [ASNativos] Funciones referenciadas y ambito Corrijo, el Delegate es como lo ha escrito Julio (añádele también el import como he puesto yo) Un saludo, Joseba Alonso Pérez www.sidedev.net www.5dms.com > -----Mensaje original----- > De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] En > nombre de Joseba Alonso > Enviado el: viernes, 11 de mayo de 2007 13:32 > Para: 'Lista dedicada a Actionscript' > Asunto: Re: [ASNativos] Funciones referenciadas y ambito > > Hacer una referencia a un método y ejecutarlo son dos cosas diferentes, > creo > que te estas liando (normal). La cuestión es la siguiente, una función > ( o > método, que es lo mismo en este caso) se ejecuta en el ámbito desde el > que > es llamado, te pongo un ejemplo: > > // Codigo escrito en _root > > function foo(){ > trace(this.toString()); > } > > var obj:Object = new Object(); > obj.toString = function(){ > trace("objeto"); > } > > // Ahora llamo a foo desde _root directamente > // por tanto la referencia this (ámbito) es _root > foo(); // _level0 > > // Ahora lo llamo desde el objeto 'obj' por tanto la referencia > // cambia a 'obj' > > obj.foo = foo; > obj.foo(); // objeto > > > En AS3 en los dos casos debería de salir _root (si no me equivoco) > mientras > que en AS1/AS2 el ámbito del objeto, y por tanto la referencia a this a > cambiado dependiendo desde donde a sido llamado si desde _root o desde > obj. > > Como decía Julio es un tema extremadamente complicado, yo diría que sin > duda > es el aspecto mas complicado del lenguaje... > > En tu caso, la solución que aportas sigue siendo invalida ya que al > hacer > _parent vuelves a depender de donde estes ejecutando la función. Te > propongo > la siguiente solución. > > import mx.utils.Delegate; > > var bajarVolumen:Function = > Delegate.create(_parent,_parent.miSonido.bajarVolumen); > > bajarVolumen(); > > Un saludo, > > Joseba Alonso Pérez > www.sidedev.net > www.5dms.com > > > > -----Mensaje original----- > > De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] En > > nombre de Ivan > > Enviado el: viernes, 11 de mayo de 2007 13:05 > > Para: Lista dedicada a Actionscript > > Asunto: Re: [ASNativos] Funciones referenciadas y ambito > > > > Seguramente lo haga con un metodo estatico, pero me interesa mucho el > > tema y > > me surgen unas dudas: > > No entiendo muy bien la diferencia entre "hacer referencia a un > metodo" > > y > > poder ejecutarlo, aunque como dice Joseba, me parece un poco lioso > que > > cambie el ambito, si es capaz de llegar a la función y ejecutarla. > > Lo pongo asi, porque en la peli hago muchas referencias al objeto de > > sonido, > > pero no tiene por que ser el mismo, y quiero almacenarlo en una > > variable > > para acceder a él con mas facilidad. Lo que ahora he hecho es esto, > en > > la > > peli de flash: > > > > var bajarVolumen:Function = function () { > > _parent.miSonido.bajarVolumen(); > > }; > > > > aunque me gustaria hacer algo como > > > > var bajarVolumen:Function = Delegate.create(_parent.miSonido, > > bajarVolumen); > > > > que me parece mucho mas elegante, pero no consigo que llege bien a la > > funcion. > > > > Comentas los punteros.... pero entiendo que eso no existe en flash, > > corrigeme si me equivoco. > > Un saludo. > > > > > > > > ----- Original Message ----- > > From: "Joseba Alonso" <[EMAIL PROTECTED]> > > To: "'Lista dedicada a Actionscript'" <[email protected]> > > Sent: Friday, May 11, 2007 11:39 AM > > Subject: Re: [ASNativos] Funciones referenciadas y ambito > > > > > > > Extraño no es. > > > Afortunadamente, todo funciona como debe funcionar. Cuando haces la > > > asignacion de al método "bajarVolumen" lo que asignas es eso, una > > > referencia al método, pero no al objeto que la posee. No la > > > sobreescribes (¿?). Lo extraño es que quieras hacer eso. Creo que > te > > > has > > > hecho un lío creyendo que apuntando a la función, ejecutarás la > > función > > > de ESA instancia, y no. Cuando la ejecutas te devuelve, > > diligentemente > > > ella, el valor de "this" en su nuevo ámbito, es decir el objeto que > > > "posee" la función, en tu caso el mute_mc. > > > > > > Punteros para que os quiero... > > > > > > Yo no diría afortunadamente :). Los ámbitos tal y como los ha tratado > > siempre Flash siempre han sido muy oscuros. El hecho de que el ámbito > > de una > > función cambie dependiendo de desde donde se llame es algo que da > > cierta > > flexibilidad, sin duda, pero en la gran mayoría de los casos > introduce > > errores y malentendidos. Vamos, no hay proyecto donde no utilice mil > > veces > > el Delegate para evitar ese comportamiento. De hecho en AS3 por fin > han > > introducido los famosos "closures" y ya no ocurre esto. El ámbito de > un > > método/función lo determina donde está definido, no de donde se > llama. > > Para > > mi tiene bastante más lógica así... Es una opinión personal en todo > > caso ;) > > > > Un saludo, > > > > > > Joseba Alonso Pérez > > www.sidedev.net > > www.5dms.com > > > > > > > > > > > > ----------------------------------------------------- > > ASNativos > > www.5dms.com > > subscripciones/desubscripciones > > http://asnativos.5dms.com > > ----------------------------------------------------- > > > > > > ----------------------------------------------------- > > ASNativos > > www.5dms.com > > subscripciones/desubscripciones > > http://asnativos.5dms.com > > ----------------------------------------------------- > > > ----------------------------------------------------- > ASNativos > www.5dms.com > subscripciones/desubscripciones > http://asnativos.5dms.com > ----------------------------------------------------- ----------------------------------------------------- ASNativos www.5dms.com subscripciones/desubscripciones http://asnativos.5dms.com ----------------------------------------------------- ----------------------------------------------------- ASNativos www.5dms.com subscripciones/desubscripciones http://asnativos.5dms.com -----------------------------------------------------

