无法访问的现有变量

时间:2010-06-13 13:09:02

标签: flex actionscript-3

我是as3的新手,也许这就是我不理解的原因,setInterval导致错误的原因。

<mx:Script>
    <![CDATA[
        import flash.utils.setInterval;
        import mx.controls.Alert;

        [Bindable]
        public var MyInt:int = 500;

        setInterval(function():void{ ++MyInt; },1000);

    ]]>
</mx:Script>

我有一个标签,其中MyInt的值可见,绑定工作完美,我已经通过多种方式进行了测试,并且ii创建了一个按钮,它增加了数字,但是如果我使用{{1我收到错误:setInterval

为什么呢?是什么导致这个?请解释一下,这样我就可以避免这样的错误。感谢

1 个答案:

答案 0 :(得分:3)

我对Flex知之甚少,但我认为问题在于这段代码:

setInterval(function():void{ ++MyInt; },1000);

就像在任何函数之外放置在类定义中一样运行。这使得代码成为静态初始化器。也就是说,它在静态上下文中运行,这意味着它无法访问任何实例,因为代码运行时尚未创建任何实例。

这似乎证明了这一点:

public static var MyInt:int = 500;

setInterval(function():void { ++MyInt; trace(MyInt); },1000);

使用static,代码可以正常运行。

但您可能不希望MyInt是静态的。因此,您应该将setInterval调用放在实例方法中。假设从init mx:Application回调调用initialize,这应该可以正常工作:

    [Bindable]
    public var MyInt:int = 500;

    private function init():void {
        setInterval(function():void { ++MyInt; trace(MyInt); },1000);
    }