2009-07-27 2 views
1

Für ein Open-Source-Projekt suche ich nach einer Möglichkeit, mehrere Variablen an Methoden zu senden. Diese Variablen sind beispielsweise Variablen, die ich direkt an ein Objekt übergeben möchte, das ich gerade erstelle.Actionscript 3: Objektvariablen durchlaufen/lesen, möglich?

Ich dachte, ein Objekt wäre ein guter Weg zu gehen, da ich so viele Variablen senden kann, wie ich möchte, ohne vorher über jede mögliche Variable nachzudenken und eine Methode zu erstellen, die 40+ Variablen akzeptiert. Das wäre irgendwie scheiße.

Das Problem ist, obwohl ich keine Ahnung habe, wie ich durch ein Objekt "laufen" und alle seine Variablen finden kann. Mit einem Array ist das einfach zu machen, aber ich kann den Namen der Variable nicht einfach mit ihm senden.

Zur Verdeutlichung ein Beispiel:

public function create(settings:Object=undefined):void{ 
    var item:Panel = new Panel(); 

    /* 
    the idea is that 'settings' should contain something like: 

    settings.width=300; 
    settings.height=500; 
    settings.visible=false; 

    and I want to be able to walk through the provided variables, 
    and in this case inject them into 'item'. 
    */ 
} 

Gibt es das überhaupt zu tun? Oder ist meine Idee, Objekt falsch zu verwenden, und sollte ich eine andere Lösung wählen? Bitte um Rat.

Vielen Dank im Voraus!

-DJ

Antwort

5

Sie können eine Objekte Eigenschaften suchen durch eine für (var prop: String in obj) mit Schleife. Die ... args Parameter können Ihnen nicht definierte Anzahl von Variablen auf eine Methode zu übergeben:

public function test() 
{ 
    var bar:Object = {x:1, y:2, z:3}; 
    var baz:Object = {a:"one", b:"two", c:"three"}; 
    foo(bar, baz); 
} 

public function foo(...args):void { 
    for(var i:int = 0; i<args.length; i++) { 
     for(var s:String in args[i]) { 
     trace("prop :: "+s); 
     trace("value :: "+args[i][s]); 
     } 
    } 
} 

drucken

prop :: z 
value :: 3 
prop :: x 
value :: 1 
prop :: y 
value :: 2 
prop :: b 
value :: two 
prop :: c 
value :: three 
prop :: a 
value :: one 

Sie ein wenig für diese eine Leistungseinbuße nehmen, aber manchmal ist es, was gebraucht wird.

+0

Fantastisch! Der für (var s: String in args [i]) Teil war genau das, wonach ich suchte! Du hast meinen Tag gemacht, Joshua! – Dave