2011-09-19 6 views
0
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]); 
     } 

    } 

} 

文字列をインスタンス名に変換する方法はありますか?ありがとうございました〜!ここ文字列をオブジェクト名に変換する方法。 as3

+0

あなたの機能(exchangeColor)で何を達成したいですか? – Mattias

答えて

1

私はあなたがこのようにそれをしたいと思う理由を知るが、ここではその関数であるcan't colors(String)のリストを渡し、16進コード(Array)を返します。 1つの色が存在しない場合は、配列で失われます。 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; 
} 
+0

ワウありがとう、あなたのソリューションは私が後にあるものであり、それは完全に動作します。あなたの解決策を投票したいと思いますが、私の評判は十分ではありません:(もう一度助けてくれてありがとう! – user775735

2

をStrugglyingあなたはすでにそこにオブジェクトを持っている、あなたはすでに行くことができるように:

_allColorCodes.black ...など

_allColorCodesprivateであることを考えると、あなたはそのような本当に素晴らしい小さなゲッターを行うことができます。

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 
); 

何かもう少し高度なプロキシとflash_proxyを使用してgetProperty()メソッドをオーバーライドすることができます。コメントを

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]; 
     } 
    } 
} 

応答::これはあなたがまっすぐバットColorLibrary.colorを行くことができるでしょう意味

さて、あなたは単にでき、ここで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] 
     ); 
    } 
} 
+0

返信ありがとうございました 私の状況は私が色の文字列を持っています var color:String = 'black、white、yellow'; 私はsplitを使用して配列を変換します この配列を使用してオブジェクトをルックアップし、16進数を返します。 私はこれをしたい _allColorCodes.colorArray [i]、 しかし、これは動作しません。何か案は? – user775735

+0

これは非常にファンシーです、初めてこれを参照してください。いいです、私はそれを試してみましょう。ありがとうございました – user775735

+0

編集を参照してください。 – Marty

関連する問題