4 Stimmen

Was bedeutet diese ActionScript-Syntax? ( Syntax für die Inline-Rückgabe von Objekten )

Ich bin Java-Programmierer und muss im Moment an einem Flex/ActionScript-Projekt arbeiten. Ich habe ein Beispiel für die Verwendung von ITreeDataDesriptor aus dem Flex 3 Cookbook, aber es gibt eine Zeile von Actionscript-Code, die schwer für mich zu verstehen ist. Ich wäre dankbar, wenn jemand dies ein wenig weiter erklären könnte.

public function getData(node:Object, model:Object=null):Object
    {
        if (node is Office) {
            return {children:{label:node.name, label:node.address}};
        }
    }

Der Teil, den ich nicht verstanden habe, war "{children:{label:node.name, label:node.address}}". Office ist einfach ein Wertobjekt, das zwei String-Eigenschaften enthält: Name und Adresse.

7voto

aaaidan Punkte 6713

Der folgende (aus der Frage abgeänderte) Rückgabewert ...

return {children:{label:node.name, body:node.address}}

... ist funktional äquivalent zu diesem Code ...

var obj:Object = new Object();
obj.children = new Object();
obj.children.label = node.name;
obj.children.body = node.address;
return obj;

Das anonyme Objekt, das im Fragecode zurückgegeben wird, macht die Sache komplizierter, weil es eine Eigenschaft zweimal definiert. In diesem Fall wird die erste Deklaration verwendet, und die folgende(n) werden ignoriert. Es wird kein Kompilierungs- oder Laufzeitfehler ausgelöst.

1voto

Luke Punkte 19845

Ich glaube, in Java würde man das eine Karte oder ein assoziatives Array nennen. In Javascript und Actionscript kann man dies sagen, um ein Objekt mit bestimmten Eigenschaften zu erstellen:

var myobject = {
   'prop1': 100,
   'prop2': {
      'a': 1
   }
}

trace( myobject.prop1 );   // 100
trace( myobject.prop2.a );   // 1

In Ihrem Beispiel wird es einfach als namenloses Objekt zurückgegeben.

1voto

Robert Gould Punkte 66858
return {children:{label:node.name, label:node.address}};

Bedeutet, dass Sie ein neues Objekt zurückgeben. Die {} sind der Konstruktor des Objekts, und in diesem Fall ist es ein Anonymous-Objekt.

0voto

Tong Wang Punkte 1582

Ich danke Ihnen beiden für die schnelle Antwort. Also, wenn ich Ihre Erklärungen richtig verstehe, gibt die return-Anweisung ein anonymes Objekt zurück, und dieses Objekt hat nur eine Eigenschaft namens "Kinder", die wiederum ein assoziatives Array ist - ok, hier ist der Teil, den ich noch nicht ganz verstehe, es scheint, dass beide Eigenschaften in diesem Array "Label" genannt werden, ist dies erlaubt?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X