你已经有了一个对象那里,所以你已经可以去:
_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]
);
}
}
你想用你的函数(exchangeColor)完成什么? – Mattias