0

是的,我确信在 SO 上有数百万个这样的问题,但这个问题难倒了我。观察下面的代码示例:

<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx"
     creationComplete="init(event)">

<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;

        [Bindable]
        private var data:Object;

        private function init(e:FlexEvent):void {
            this.data.item = new Array();
        }
    ]]>
</fx:Script>
</s:Group>

为什么我不能item在对象上创建数组data?我认为Object该类天生就被宣布为动态的?这是我在运行时遇到的错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.

有人可以帮我弄清楚如何在这个对象上创建我自己的属性。通常这很容易。哈哈

感谢您的时间。

4

4 回答 4

3

问题是data尚未实例化并且为空。

<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx"
     creationComplete="init(event)">

<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;

        [Bindable]
        private var data:Object;

        private function init(e:FlexEvent):void {
            this.data = {};
            this.data.item = new Array();
        }
    ]]>
</fx:Script>
</s:Group>
于 2012-07-29T02:08:52.480 回答
2

首先确保数据存在。

private function init(e:FlexEvent):void {
   this.data = {};
   this.data.item = new Array();
}
于 2012-07-29T02:08:32.167 回答
2

更好的是,您可以这样做:

private function init(e:FlexEvent):void {
    if(this.data == null) 
        this.data = {};
    this.data.item = new Array();
}

这样,每当调用 init 时,如果数据存在,它就不会被空白对象覆盖。

于 2012-07-29T05:02:24.517 回答
0

您混淆了数据类型和数据实例。object尽管并非所有对象都是动态 的,但所有类都派生自。

换句话说,如果 data 是非动态的数据类型,那么您不能设置该item属性。dynamicAS3 中的类使用关键字定义为动态的。匿名对象默认是动态的:

因此,如果您设置,this.data = {}那么您将能够设置该item属性。

于 2012-07-29T02:11:56.547 回答