2008-12-17 37 views
4

我是一名Java程序员,现在需要在Flex/ActionScript项目上工作。我有一个使用Flex 3 Cookbook中的ITreeDataDesriptor的例子,但是有一行actionscript代码很难理解。我很感激,如果有人能够进一步解释这一点。这个ActionScript语法是什么意思? (内联返回对象的语法)

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

我不明白的部分是“{children:{label:node.name,label:node.address}}”。 Office只是一个包含两个字符串属性的值对象:名称和地址。

回答

7

以下返回表达式(从问题修改)...

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

...是功能上等效于以下代码...

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

匿名对象中的问题返回代码使问题复杂化,因为它定义了一个属性两次。在这种情况下,将使用第一个声明,并忽略后面的声明。没有编译时或运行时错误被抛出。

1

我认为在Java中你可以称之为地图或关联数组。 JavaScript和ActionScript中,您可以说这与某些属性创建一个对象:

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

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

在您的例子,它只是返回一个无名对象。

1
return {children:{label:node.name, label:node.address}}; 

表示您正在返回一个新对象。 {}是Object的构造函数,在这种情况下,它是一个Anonymous对象。

0

谢谢你们的快速反应。所以如果我正确理解你的解释,return语句返回一个匿名对象,并且这个对象只有一个名为“children”的属性,它又是一个关联数组 - ok,这里是我还不太了解的部分,看起来这个数组中的两个属性都被命名为“label”,这是允许的吗?

+0

这很奇怪,实际上 – 2008-12-17 02:06:51