0

AS3에서는 멤버 함수를 호출하여 멤버 변수 (또는 상수)를 초기화 할 수 있습니다. 이것은 생성자가 호출되기 전에 발생합니다. 그 동안 'this' 키워드는 생성자 함수가 아직 발행되지 않았더라도 초기화 멤버 함수에서 완벽하게 액세스 할 수 있습니다.생성자 전의 멤버 함수 호출

시한 폭탄처럼 들립니다. 누구든지 위의 연습에 대해 언급 할 수 있습니까?

편집 : 내가 알고있는 것처럼 (정말 좋은 읽을 수없는 경우)

... 
private var member:Sprite = getSprite(); // called before constructor 
... 
private function getSprite():Sprite { 
    var spr:Sprite = new Sprite(); 
    this.addChild(spr); // 'this' used before constructor 
    return spr; 
} 
+1

정확히 무슨 뜻인지 보여주는 코드를 게시 할 수 있습니까? –

+0

빠른 예를 추가했습니다 –

+0

같은 클래스에 두 코드 블록이 모두있는 것 같습니다. 이것을 시도하면 깨닫게 될 것입니다.'GetSprite'라는 이름으로 새로운 클래스를 생성하십시오. 생성자에 코드가 없으며,'getSprite' 함수가 있고 다른 클래스에서'getSprite' 함수에 접근하면 역설을 이해할 것입니다. 귀하의 질문에. – Moorthy

답변

3

, 그건 괜찮아요. 새로운 기능이 호출 될 때 발생하는 것입니다 :

  1. 메모리
  2. 모든 구성원은 생성자가
  3. 라고
  4. (중 기본 또는 무엇이든 지정에) 초기화 (this 사용할 수있게) 인스턴스에 대해 할당
  5. new 반환 this

위험은 당신이 있는지 확인해야한다는에 있다고 getSprite() 연구에서 아무것도 생성자 (부모 ​​생성자가 호출 된 경우 포함)에서 초기화되는 내용을 나타냅니다. 나는 그것을 피하고 단지 생성자의 모든 것을 초기화 할 것이다.

0

당신이 말하는 것을 실제로 할 수는 없습니다. 인스턴스가 아직 구성되지 않은 경우 인스턴스의 비 정적 메소드에 액세스 할 수 없습니다. super를 호출하는 생성자에 대한 Jonatan의 설명에 대해서는 생성자 본문에 super()를 호출하지 않으면 자동으로 메서드의 맨 위에서 발생합니다. 객체 지향 언어로 객체를 구성하면 클래스의 모든 구성원을위한 메모리가 할당됩니다. 당신이 말을이었다 아닌 경우

var myVar:MyObject; 
myVar.doSomething(); //this line creates a null pointer exception because myVar is null 

:

당신이 말한다면

var myVar:MyObject = MyObject.createInstance(); // assuming createInstance is a static method that returns an instance of MyObject 
myVar.doSomething(); //assuming createInstance() didn't return null then this works 

그러나이 두 번째 경우에 당신이 정적 메소드 내에서 "이"키워드를 참조 할 수 없습니다

createInstance().

나는 진술 한 것을 반박하는 모든 예를 보여 주면 그것을 실행하고 내 게시물을 삭제할 것이지만 나는 여기 있다고 확신한다.

관련 문제