Flex对象创建加倍实例数

我有以下火花应用:
<?xml version="1.0" encoding="utf-8"?>
  <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" 
                        minHeight="600" xmlns:local="*">
        <local:TestComponent objects="{[new TestObject()]}">
        </local:TestComponent>
  </s:Application>
TestComponent:
package
{
  import mx.core.UIComponent;

  public class TestComponent extends UIComponent
  {
    public function TestComponent()
    {}
    public function set objects(array:Array):void
    {}
  }
}
的TestObject:
package
{
  public class TestObject
  {
     public function TestObject()
     {}
     public function set objs(value:Array): void
     {}
  }
}
我观察到TestObject的构造函数被调用了2次,并且创建了两个TestObject实例。 创建顺序如下: TestObject构造函数 TestComponent构造函数 TestObject构造函数 调用TestComponent.objects(参数的值只包含一个对象)。 如果我在mxml中使用“element”方式实例化TestObject:
<local:TestComponent>
  <local:objects>
     <local:TestObject>
     </local:TestObject>
  </local:objects>
</local:TestComponent>
仅创建一个TestObject实例。 任何人都可以解释为什么在使用属性语法时创建两个对象与元素语法相反(我认为是相同的)?     
已邀请:
这两种语法肯定不一样。主要区别在于第一种语法将导致Flex实现绑定,而第二种语法则不会。 Flex编译器将你在squiggly括号中放置的任何东西都放在一个匿名函数中,绑定在执行时调用它。构造函数被调用两次的具体原因是因为应用程序启动时,应用程序的显示列表中的UIComponent元素执行了两次绑定。第一次执行发生在Application的构造函数中,其中最初创建了所有绑定(在
preinitialize
事件之前)。第二次执行绑定时会在创建UIComponent时发生。 (注意:在
applicationComplete
事件之前可能发生的绑定执行次数因不同的组件而异,以及与它们绑定的内容。) 如果你想在应用程序初始化中使用绑定但不创建垃圾,我会建议:
<fx:Declarations>
    <local:TestObject id="testObject"/>
</fx:Declations>

<local:TestComponent objects="{[testObject]}"/>
    

要回复问题请先登录注册