У тебя уже есть объект там, так что вы уже можете пойти:
_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
Try что-то подобное для exchangeColor()
функции:
public function exchangeColor(colors:String):void
{
var colorArray:Array = colors.split(',');
for each(var i:String in colorArray)
{
trace(
_allColorCodes[i]
);
}
}
Что вы хотите достичь своей функцией (exchangeColor)? – Mattias