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

나는 플렉스에 대해 잘 모르겠지만, 나는 문제가이 코드 있다고 생각 :

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

가 어떤 기능을 외부 클래스 정의에 배치 된 경우처럼 실행됩니다. 따라서 코드는 정적 초기화 프로그램이됩니다. 즉, 코드가 실행될 때 인스턴스가 아직 작성되지 않았으므로 인스턴스에 대한 액세스 권한이없는 정적 컨텍스트에서 실행됩니다.

이 그것을 증명하는 것 같다 static

public static var MyInt:int = 500; 

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

는, 코드가 잘 작동합니다.

MyInt은 정적 일 필요가 없습니다. 따라서 인스턴스 메서드 내에서 setInterval 호출을 배치해야합니다. init 가정하면 mx:Applicationinitialize 콜백에서 호출이 잘 작동해야합니다 그래서 통보하지 않았다 실행할 때

[Bindable] 
    public var MyInt:int = 500; 

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

함수 클로저 내 나쁜, 나는 무의식적 init 함수에서 setInterval을 코드를 배치했다. 내 대답을 삭제했습니다. – phwd

관련 문제