flex - lenguaje - ¿Qué significa esta sintaxis de ActionScript?(Sintaxis para devolver objetos en línea)
as3 rpdr (4)
Soy un programador de Java y necesito trabajar en un proyecto de Flex / ActionScript en este momento. Obtuve un ejemplo del uso de ITreeDataDesriptor de Flex 3 Cookbook, pero hay una línea de código ActionScript que es difícil de entender. Agradezco si alguien pudiera explicar esto un poco más.
public function getData(node:Object, model:Object=null):Object
{
if (node is Office) {
return {children:{label:node.name, label:node.address}};
}
}
La parte que no entendí fue "{children: {label: node.name, label: node.address}}". Office es simplemente un objeto de valor que contiene dos propiedades de cadena: nombre y dirección.
Creo que en Java lo llamarías un mapa o una matriz asociativa. En Javascript y Actionscript puedes decir esto para crear un objeto con ciertas propiedades:
var myobject = {
''prop1'': 100,
''prop2'': {
''a'': 1
}
}
trace( myobject.prop1 ); // 100
trace( myobject.prop2.a ); // 1
En su ejemplo, simplemente se devuelve como un objeto sin nombre.
Gracias a ambos por la respuesta rápida. Entonces, si entiendo tus explicaciones correctamente, la declaración de devolución devuelve un objeto anónimo, y este objeto tiene solo una propiedad llamada "hijos", que de nuevo es una matriz asociativa - ok, esta es la parte que aún no entiendo del todo, parece que ambas propiedades de esta matriz se llaman "etiqueta", ¿está permitido?
La siguiente expresión de retorno (modificada de la pregunta) ...
return {children:{label:node.name, body:node.address}}
... es funcionalmente equivalente a este código ...
var obj:Object = new Object();
obj.children = new Object();
obj.children.label = node.name;
obj.children.body = node.address;
return obj;
El objeto anónimo devuelto en el código de pregunta complica las cosas porque define una propiedad dos veces. En ese caso, se usa la primera declaración, y la (s) siguiente (s) se ignoran. No se genera ningún error de tiempo de ejecución ni de tiempo de ejecución.
return {children:{label:node.name, label:node.address}};
Significa que estás devolviendo un nuevo objeto. Los {} son el constructor del Objeto, y en este caso es un objeto Anónimo.