AS3错误代码1009 - 无法访问空对象引用的属性或方法

时间:2012-07-29 01:39:27

标签: actionscript-3 flash flex object dynamic

是的,我确信在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 个答案:

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

答案 1 :(得分:2)

确保数据首先存在。

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

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

换句话说,如果数据是非动态数据类型,则无法设置item属性。使用dynamic关键字将AS3中的类定义为动态。默认情况下,匿名对象是动态的:

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