[AS3] 정적 프롭퍼티와 스코프 체인

Programming/ActionScript 3.0 2007. 6. 15. 14:00
정적 프롭퍼티는 계승되지 않지만 그 프롭퍼티가 정의된 클래스 및 그 클래스의 서브 클래스에서는 스코프 체인내에 있다. 즉, 정적 프롭퍼티가 정의된 클래스 및 그 서브 클래스의 스코프 내로부터 직접 정적 프롭퍼티에 액세스 할 수가 있다.













package {
import flash.display.MovieClip;
public class StaticExample extends MovieClip {
public function StaticExample() {
var myExt:Extender = new Extender();
}
}
}

class Base {
public static var test:String = "static";
}

class Extender extends Base {
public function Extender () {
trace(test); //
}
}

출력 : static


인스턴스 프롭퍼티가 같은 클래스 또는 슈퍼 클래스내에서 정적 프롭퍼티와 같은 이름을 사용하고 있는 경우 인스턴스 프롭퍼티는 스코프 체인내에서 우선 순위가 높아진다. 이는 정적 프롭퍼티의 값이 아니라 인스턴스 프롭퍼티의 값이 사용되는 것을 의미한다.

package {
import flash.display.MovieClip;
public class StaticExample extends MovieClip {
public function StaticExample() {
var myExt:Extender = new Extender();
}
}
}

class Base {
public static var test:String = "static";
}

class Extender extends Base {
public var test:String = "instance";
public function Extender () {
trace(test); //
}
}

출력 : instance
다른 예로 parent_mc라는 무비클립에 포함된 child_mc라는 무비클립이 있을 때 두개의 무비클립에 CLICK 이벤트 적용하게 되면 결과는 아래와 같이 나오게 된다.

parent_mc.child_mc.addEventListener(MouseEvent.CLICK, childClickHandler);
parent_mc.addEventListener(MouseEvent.CLICK, parentClickHandler);

function childClickHandler(evt:Event):void{
trace(evt.target.name +" is a child");
}
function parentClickHandler(evt:Event):void{
trace(evt.target.name +" is a parent");
}
출력 :
child_mc is a child
child_mc is a parent
parentClickHandler에서 해당 이벤트가 적용된 무비클립에 접근하기 위해서는 아래와 같은 형태로 접근을 시도해야 한다.

trace(evt.target.parent.name +" is a parent");

    

설정

트랙백

댓글