Pregunta sobre actionscript-3 – AS3: usando la cadena como variable

4

¿Existe la posibilidad de extraer el nombre de variable de la cadena y usarlo como variable

var myvar:String = "flash";
var flash:Number = 10;
trace( myvar as variable );

algo como eso

Tu respuesta

3   la respuesta
4

Puedes usarlo como una propiedad de un objeto.

public dynamic class MyClass {
    function MyClass(propName:String, propValue:*) {
        this[propName] = propValue;
    }
}

o

var myvar:String = "flash";
var o : Object = {};
o[myvar] = 10;
trace(o.flash); //10

Si no sabe qué nombre de propiedad va a ser, entonces debe usardynamic clase (Object esdynamic por defecto)

5

El nombre de la variable como cadenas se puede hacer así:

this["myvar"] = "flash";

Notas:

Esto lanzará unReferenceError si la propiedad no ha sido definida previamente y lathis se refiere a un objeto que no esdynamic.Por supuesto, puede reemplazarthis con el nombre de instancia de un objeto del que desea usar una propiedad, por ejemplo,mySprite["x"].También puede utilizar este enfoque para llamar a métodos:this["addChild"](mySprite);
1

Lo que necesita es similar alDictionary clase en .NET, y está disponible por defecto en elObject clase de AS3.

var key:String="hello";
var value:int=100;
var map:Object=new Object();
map[key]=value;

Ahora, puede obtener su valor almacenado como

trace(map[key]);

Si lo desea, también puede aprovechar esto para crear una clase como la siguiente:

public class Dictionary {
    private var _keys:Array;
    private var _maps:Object;
    public function Dictionary() {
        _keys=[];
        _maps:Object={};
    }

    //Returns the array of all saved keys
    public function get keys():Array {
        return _keys;
    }

    //Sets a key-value pair
    public function setProperty(key:*, value:*):int {
        _maps[key]=value;
        return _keys.push(key);
    }

    //Returns the value stored at a particular key
    public function getProperty(key:*):* {
        if(_keys.indexOf(key) != -1) {
            return _maps[key];
        }
        return null;
    }

    //Removes a key-value pair if it exists and returns if the key existed
    public function deleteProperty(key:*):Boolean {
        var ix:int;
        if((ix=_keys.indexOf(key)) != -1) {
            //dissociate value from key
            delete _maps[key];
            //delete key
            _keys.splice[ix,1];
            return true;
        }
        return false;
    }
}

Y puedes usar esto como:

var dict:Dictionary=new Dictionary();
//set the value
dict.setProperty("flash", 10);

//get the value
dict.getProperty("flash");

//delete if not required
dict.deleteProperty("flash");

Tenga en cuenta que esto se puede usar para establecer claves y valores de CUALQUIER tipo. También resuelve el tema de laReferenceError Si la propiedad no está definida, y no necesita usar ninguna clase dinámica en SU ​​código (ya queDictionary la clase lo maneja internamente).

Un uso muy típico de esto sería definir funciones de análisis. p.ej. en un visor de hojas de cálculo:

var parseFuncts:Dictionary=new Dictionary();
parseFuncts.setProperty("csv", Parsers.parseCSV);
parseFuncts.setProperty("xml", Parsers.parseXML);
parseFuncts.setProperty("txt", Parsers.parseTXT);
parseFuncts.setProperty("xls", Parsers.parseXLS);
parseFuncts.setProperty("xlsx", Parsers.parseXLSX);

var fileToOpen:File; //Already contains the file to open

private function open():void {
    var f:Function=parseFuncts.getProperty(fileToOpen.extension);
    f.apply(this);
}
@MartyWallace, doh! Nunca lo busqué, no sabía que existía. Gracias por dejarme saber: P Pranav Hosangadi

Preguntas relacionadas