是的,我确信在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.
有人可以帮我弄清楚如何在这个对象上创建自己的属性。通常这很容易。洛尔
感谢您的时间。
答案 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
属性。