public class ColorLibrary {
private var _allColorCodes:Object;
public function ColorLibrary() {
init();
}
private function init(){
_allColorCodes = {
'black' : '000000',
'white' : 'FFFFFF',
'yellow' : '000000'
}
}
public function exchangeColor(colors:String){
var colorArray:Array = colors.split(',');
for ( var i:int = 0; i < colorArray.length; i++ ) {
_allColorCodes.getDefinitionByName(colorArray[i]);
}
}
}
任何想法如何将字符串转换为实例名称?非常感谢〜!在这里挣扎
答案 0 :(得分:2)
你已经有了一个物体,所以你已经可以去了:
_allColorCodes.black
..等等
考虑到_allColorCodes
是private
,你可以这样做一个非常好的小傻瓜:
public function get colorCode():Object
{
return _allColorCodes;
}
然后就是:
trace(colorCode.black);
trace(colorCode.yellow);
所有这一切,我要做的是将所有这些东西存储在像ColorCodes
这样的类中的常量中,如下所示:
package
{
public class ColorCodes
{
public static const BLACK:uint = 0x000000;
public static const RED:uint = 0xFF0000;
public static const BLUE:uint = 0x0000FF;
public static const GREEN:uint = 0x00FF00;
public static const WHITE:uint = 0xFFFFFF;
}
}
然后通过以下方式访问它们:
trace(
ColorCodes.RED
);
您可以做的更高级的事情是使用Proxy和flash_proxy来覆盖getProperty()
方法。这意味着您可以直接使用ColorLibrary.color:
package
{
import flash.utils.Proxy;
import flash.utils.flash_proxy;
public class ColorLibrary
{
private var _allColorCodes:Object;
public function ColorLibrary()
{
_allColorCodes = {
'black' : '000000',
'white' : 'FFFFFF',
'yellow' : '000000'
}
}
override flash_proxy function getProperty(name:*)*
{
return _allColorCodes[name];
}
}
}
对评论的回应:
好的,你不需要在这里使用getDefinitionByName,只需使用括号通过解析字符串来访问对象的值。
示例:
var object:Object = {
something: 2,
anotherThing: "something awesome"
};
trace(object["something"]); // same as object.something
trace(object["anotherThing"]); // same as object.anotherThing
尝试使用exchangeColor()
函数:
public function exchangeColor(colors:String):void
{
var colorArray:Array = colors.split(',');
for each(var i:String in colorArray)
{
trace(
_allColorCodes[i]
);
}
}
答案 1 :(得分:1)
我不明白为什么你会这样做,但这是一个传递颜色列表(String)并返回十六进制代码(Array)的函数。如果不存在一种颜色,则会在阵列中丢失。我建议使用ColorList.RED
或至少ColorManager.getColor("red")
。
var colorList : Array = getColorList("black,yellow");
public function getColorList(colors : String) : Array
{
var result : Array = new Array();
var colorArray : Array = colors.split(',');
for(var i : int = 0; i < colorArray.length ; i++)
{
if(_allColorCodes[colorArray[i]])
result.push(_allColorCodes[colorArray[i]]);
}
return result;
}