Что означает этот синтаксис ActionScript? (Синтаксис для возврата объектов Inline) - PullRequest
4 голосов
/ 17 декабря 2008

Я программист на Java, и мне нужно работать над проектом Flex / ActionScript прямо сейчас. Я получил пример использования ITreeDataDesriptor из Flex 3 Cookbook, но есть одна строка кода 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 - это просто объект значения, который содержит два свойства String: имя и адрес.

Ответы [ 4 ]

7 голосов
/ 17 декабря 2008

Следующее возвращаемое выражение (изменено из вопроса) ...

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 голос
/ 17 декабря 2008
return {children:{label:node.name, label:node.address}};

Означает, что вы возвращаете новый объект. {} - это конструктор объекта, в данном случае это анонимный объект.

1 голос
/ 17 декабря 2008

Я думаю, что в Java вы бы назвали это картой или ассоциативным массивом. В Javascript и Actionscript вы можете сказать это, чтобы создать объект с определенными свойствами:

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

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

В вашем примере он просто возвращается как безымянный объект.

0 голосов
/ 17 декабря 2008

Спасибо вам обоим за быстрый ответ. Так что, если я правильно понимаю ваши объяснения, оператор return возвращает анонимный объект, и у этого объекта есть только одно свойство с именем «children», которое снова является ассоциативным массивом - хорошо, вот часть, которую я до сих пор не совсем понимаю, кажется, что оба свойства в этом массиве называются "метка", это разрешено?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...