是否有可能從字符串中提取變量名,並用它作爲變量AS3:使用字符串可變
var myvar:String = "flash";
var flash:Number = 10;
trace(myvar as variable);
類似的東西
是否有可能從字符串中提取變量名,並用它作爲變量AS3:使用字符串可變
var myvar:String = "flash";
var flash:Number = 10;
trace(myvar as variable);
類似的東西
你可以使用它作爲一個對象的屬性。
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
默認)
變量名作爲字符串可以這樣做:
this["myvar"] = "flash";
說明:
ReferenceError
如果屬性尚未以前定義和this
指的是對象,它是不是dynamic
。this
替換要使用屬性的對象的實例名稱,例如, mySprite["x"]
。this["addChild"](mySprite);
你所需要的是類似於在.NET中Dictionary
類,它是默認可用在Object
類AS3的。現在
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");
不是e這可以用來設置任何類型的鍵和值。如果該屬性未定義,並且您不需要在代碼中使用任何動態類(因爲Dictionary
類在內部處理它),它也解決了ReferenceError
的問題。
一個非常典型的用法是定義解析函數。 例如在電子表格中觀看者:
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);
}
[AS3具有'Dictionary'類(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/Dictionary.html) – Marty
@MartyWallace,哈哈!從來沒有找過它,不知道它存在。感謝您告訴我:P –