AS3:使用字符串作为变量

时间:2012-05-21 07:28:02

标签: actionscript-3

是否有可能从字符串中提取变量名称并将其用作变量

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

类似的东西

3 个答案:

答案 0 :(得分:5)

变量名称为字符串可以这样完成:

this["myvar"] = "flash";

注意:

  • 如果先前未定义该属性并且ReferenceError引用的对象不是this,则会抛出dynamic
  • 您当然可以将this替换为您要使用属性的对象的实例名称,例如: mySprite["x"]
  • 您也可以使用此方法调用方法:this["addChild"](mySprite);

答案 1 :(得分:4)

您可以将其用作对象的属性。

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

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

如果你不知道属性名称是什么,那么你应该使用dynamic类(Object默认为dynamic

答案 2 :(得分:1)

您需要的内容类似于.NET中的Dictionary类,默认情况下,它在AS3的Object类中可用。

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

现在,您可以将存储的值设为

trace(map[key]);

如果你愿意,你也可以在此基础上建立一个如下的类:

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

您可以将其用作:

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");

请注意,这可用于设置任何类型的键和值。如果未定义属性,它也解决了ReferenceError的问题,并且您不需要在您的代码中使用任何动态类(因为Dictionary类在内部处理它)。

这个的一个非常典型的用法是定义解析函数。 例如在电子表格查看器中:

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);
}