Ivan escribió:
> Hola lista
> tengo un problema de ambitos en una clase, pero no consigo arreglarlo ni con 
> el Delegate.
> Tengo una clase que controla unos sonidos, y tiene unos metodos publicos que 
> suben y bajan el volumen:
>
> class SonidoGlobal {
>     function SonidoGlobal() {
>         //
>     }
>     public function bajarVolumen():Void {
>         trace("Bajando...");
>         trace(this);
>     }
> }
>
>
> La instancio en la peli
>
>     var miSonido:SonidoGlobal = new SonidoGlobal();
>
> Si hago la llamada a miSonido.bajarVolumen(), no hay problema, la funcion 
> hace lo que tiene que hacer y al trazar this, devuelve un objeto de tipo 
> SonidoGlobal, la instancia creada.
> Pero tengo un clip (mute_mc) donde hay una serie de funciones y hago una 
> referencia al metodo de la clase, que me resulta muy comoda. Simpre me ha 
> ido muy bien, corregidme si no se puede hacer asi.
>
> var bajarVolumen:Function = _parent.miSonido.bajarVolumen;
>
> this.onPress = function() {
>     bajarVolumen();    // Esto no funciona, devuelve _level0.mute_mc
>     //_parent.miSonido.bajarVolumen();     // Esto si funciona, devuelve 
> [Object, Object]
> };
>
> Es extraño, ambas llamadas llegan bien a la funcion, pero parece que al 
> sobreescribirla, pierde el ambito y por lo tanto no funciona bien.
> Alguna sugerencia?
> Gracias.
>
>
>
>
> -----------------------------------------------------
> ASNativos
> www.5dms.com
> subscripciones/desubscripciones
> http://asnativos.5dms.com
> -----------------------------------------------------
>
>
>   
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...

Soluciones: coge la referencia al objeto directamente, como haces en lo 
que te funciona, y llama al método "bajarVolumen", no entiendo porque no 
lo usas directamente. Otra posibilidad es hacer el método estático y 
hacer la llamada directamente desde el nombre de la clase, pero eso 
depende del código que tenga dentro el método...




-----------------------------------------------------
ASNativos
www.5dms.com
subscripciones/desubscripciones
http://asnativos.5dms.com
-----------------------------------------------------

Responder a