2009-09-22 5 views
0

한 클래스에서 다른 클래스로 일부 변수를 전달하려고하지만 아래 코드가 작동하지 않습니다.플래시 액션 스크립트 3 변수 범위가 작동하지 않습니다.

package a { 
    public class a { 
    public var a_var:String; 
    public var x_var:String; 
    public function a() { 
     var a_var = 'My name'; 
     var x_var = 'X string'; 
    } 
    public function show_a():String { 
     return a_var; 
    }  
    } 

    public class b { 
    public function b() { 
     var a_obj:a = new a(); 
     trace('trace' + a_obj.a_var); //is this wrong? 
     trace(a_obj.show_a()); //is this possible? if so, what would be the output? 
    } 
    } 
} 

나는 null 값을 반환 a_obj.a_var 클래스 b에 클래스 a에서 a_var을 통과 할 때.

어떻게하면됩니까? 클래스에서

답변

1

생성자 교체 :와

public function a() { 
    var a_var = 'My name'; 
    var x_var = 'X string' 
} 

: 흐름 후 collecteded 변수 GET 쓰레기는 생성자에서 얻을 수 있도록

public function a() { 
    this.a_var = 'My name'; 
    this.x_var = 'X string' 
} 

키워드 var는 생성자에서 지역 변수를 만듭니다.
this을 사용하면이 경우에 원하는 값인 인스턴스 변수에 값을 할당 할 수 있습니다.

0

a의 생성자에서 a_var 및 x_var 클래스 필드를 지정하지 않기 때문입니다. 로컬 범위를 가지며 생성자 블록의 끝에서 범위를 벗어나는 indentically 명명 된 변수를 선언하고 있습니다. 다음 두 줄의 시작 부분에서 var를 제거하십시오.

var a_var = 'My name'; 
var x_var = 'X string' 

... 모두 좋을 것입니다.

0

package{} 선언 안에 두 번 이상 클래스를 올릴 수 없습니다. 두 파일로 분할하거나 package{}에서 하나의 클래스를 가져 와서 public 액세스 수정자를 제거하십시오.

//A.as 
package a 
{ 
    public class A 
    { 
    //constructor and stuff 
    } 
} 
class B 
{ 
    //class B goes here 
} 

또는

//A.as 
package a 
{ 
    public class A 
    { 
    //constructor and other stuff 
    } 
} 
//B.as 
package a 
{ 
    public class B 
    { 
    //constructor and other stuff 
    } 
} 

그리고 그래, 낭비가 지적했듯이, u는 생성자에서 var 선언을 제거해야합니다.

+0

예 예문 파일 n 예를 들어 설명해 드리겠습니다. – coderex

관련 문제