tipos - Flex/Actionscript: acceso dinámico var estático
texto estático flash (2)
Digamos que tengo una clase Foo:
public class Foo
{
public static var bar:String = "test";
}
¿Cómo puedo hacer referencia a la barra en tiempo de ejecución usando la cadena "Foo" o / y la instancia de Foo y la cadena "barra"?
Es decir
var x:Object = new Foo();
...
x["bar"]
... no funciona, el modo de depuración en IntelliJ me dio muchas esperanzas, ya que la barra aparece como una propiedad.
Actualizar:
Tenga en cuenta que en el "punto de acción" no sé nada sobre foo en tiempo de compilación. Necesito resolver Foo.bar a través de las cadenas "Foo" y "bar".
Dicho de otra manera, como flex no tiene eval ¿cómo puedo lograr lo mismo que eval ("Foo.bar")?
"bar" es una variable estática, por lo que debe acceder a ella a través de la clase en lugar de una instancia de la clase.
trace(Foo.bar); // "test"
Si al acceder dinámicamente a la variable, quiere decir acceder a ella con un nombre de cadena, entonces también quiere hacer eso a través de la clase.
trace(Foo["bar"]); // "test"
Es una variable estática, por lo que no podrá acceder a ella utilizando una instancia de foo; se accede de forma estática, utilizando la notación ClassName.variableName, así:
trace (Foo.bar);
// cede: "prueba"
Además, debido a que declaras públicas tanto Foo como la barra, deberías poder acceder a Foo.bar de esa manera desde cualquier lugar de tu aplicación.
Actualización : Ah, veo lo que estás preguntando. Puede usar flash.utils.Summary.getDefinitionByName ():
// Either this way
trace(getDefinitionByName("Foo").bar);
// Or this
trace(getDefinitionByName("Foo")["bar"]);
... esto último gracias a la respuesta de Jeremy, que era nueva para mí. :)