2010-06-13 178 views
1

我是新的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创建一个按钮,它的增长数量,但如果我使用setInterval功能我出现错误:Access of undefined property myInt

为什么?这是什么造成的?请解释一下,所以我可以避免这样的错误。由于

回答

3

我不知道很多关于Flex,但我认为这个问题是此代码:

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

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

这似乎可以证明这一点:

public static var MyInt:int = 500; 

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

随着static,代码工作正常。

虽然你可能不希望MyInt是静态的。所以你应该把setInterval调用放在一个实例方法中。假设initmx:Applicationinitialize回调调用,这应该很好地工作:

[Bindable] 
    public var MyInt:int = 500; 

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

我的坏与功能关闭,我不自觉地放在setInterval的代码在初始化函数运行,所以我没有注意到的时候。我删除了我的答案 – phwd 2010-06-13 16:23:28