这个ActionScript语法是什么意思? (返回对象内联的语法)

时间:2008-12-17 01:26:31

标签: flex actionscript-3

我是一名Java程序员,现在需要处理Flex / ActionScript项目。我得到了一个使用Flex 3 Cookbook的ITreeDataDesriptor的例子,但是有一行动作脚本代码很难理解。如果有人能够进一步解释这一点我感激不尽。

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只是一个包含两个String属性的值对象:名称和地址。

4 个答案:

答案 0 :(得分: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 :(得分:1)

我认为在Java中你会称之为地图或关联数组。在Javascript和Actionscript中,您可以这样说来创建具有某些属性的对象:

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

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

在您的示例中,它只是作为无名对象返回。

答案 2 :(得分:1)

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

表示您正在返回一个新对象。 {}是Object的构造函数,在本例中是一个Anonymous对象。

答案 3 :(得分:0)

感谢您的快速回复。因此,如果我正确理解你的解释,return语句将返回一个匿名对象,并且这个对象只有一个名为“children”的属性,这又是一个关联数组 - 好的,这是我还不太了解的部分,似乎这个数组中的两个属性都被命名为“label”,这是允许的吗?