2010-06-13 164 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