如何将字符串转换为对象名称。 as3
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]);
}
}
}
任何想法如何将字符串转换为实例名?非常感谢〜! Strugglying这里如何将字符串转换为对象名称。 as3
我不能见你为什么会想这样做这样的,但在这里是一个函数,传递颜色列表(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;
}
哇非常感谢,你的解决方案是我以后的一个,它完美的作品。想要投票你的解决方案,但我的声誉是不够的:(再次感谢您的帮助! – user775735
你已经有了一个对象那里,所以你已经可以去:
_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]
);
}
}
感谢您的快速回复, 但我的情况是我有一串颜色 var color:String ='black,white,yellow'; 和我使用拆分转换数组 然后使用此数组查找对象并返回十六进制数。 我想这样做 _allColorCodes.colorArray [i], 但这是行不通的。有任何想法吗? – user775735
哇这很花哨,第一次看到这个。好的,我会试试看。非常感谢 – user775735
请参阅编辑..希望有所帮助。 – Marty
你想用你的函数(exchangeColor)完成什么? – Mattias