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
-----------------------------------------------------