静态初始化程序中的“访问未定义属性”错误

时间:2011-03-16 16:16:15

标签: flex actionscript initialization

我希望在ActionScript静态初始化程序中初始化两个静态ArrayList对象。

我写了这段代码:

import mx.collections.ArrayList;

public class Problem{

    [Bindable] private static var levelNumbers:ArrayList;
    [Bindable] private static var speedNumbers:ArrayList;

    {
        for (var loopInt:int = 1; loopInt<901; loopInt++){
            levelNumbers.addItem(loopInt);
            speedNumbers.addItem(loopInt);
        }
    }

    //...
}

但代码无法编译。我在for循环的三行中得到了这个错误:

1120 : Access of undefined property loopInt

为什么会这样?我像往常一样定义变量!

2 个答案:

答案 0 :(得分:4)

问题实际上是代码中的本地loopInt变量。使用静态inialisers时,不能使用this,类的名称或局部变量。前两个可能是因为课程还没有完全存在,而最后一个,我不确定(也许没有范围?)。

要使其工作,请将循环提取到函数中。像这样:

{
    _init();
}

private static function _init():void
{
    for (var loopInt:int = 1; loopInt<901; loopInt++){
        levelNumbers.addItem(loopInt);
        speedNumbers.addItem(loopInt);
    }
}

它应该有效

答案 1 :(得分:-1)

这是因为Flex中没有ArrayList。你的意思是ArrayCollection。这个代码应该可以正常工作。

  

公共课问题{
  [Bindable] private static var levelNumbers:ArrayCollection;
  [Bindable] private static var speedNumbers:ArrayCollection;
  {trace(“1”+ getTimer());
  for(var loopInt:int = 1; loopInt&lt; 901; loopInt ++){
   levelNumbers.addItem(loopInt);
  speedNumbers.addItem(loopInt); }
  trace(“2”+ getTimer()+“\ n \ n”); } // ...}