Flash CS3 설명서 |
|||
| ActionScript 3.0 프로그래밍 > ActionScript 언어 및 구문 > 데이터 유형 > 동적 클래스 | |||
동적 클래스는 속성 및 메서드를 추가하거나 변경하여 런타임에 변경할 수 있는 객체를 정의합니다. String 클래스와 같이 동적이지 않은 클래스는 봉인된 클래스입니다. 런타임에 속성 또는 메서드를 봉인된 클래스에 추가할 수 없습니다.
클래스를 선언할 때 dynamic 특성을 사용하여 동적 클래스를 만듭니다. 예를 들어, 다음 코드에서는 Protean이라는 동적 클래스를 만듭니다.
dynamic class Protean
{
private var privateGreeting:String = "hi";
public var publicGreeting:String = "hello";
function Protean()
{
trace("Protean instance created");
}
}
이어서 Protean 클래스의 인스턴스를 인스턴스화하는 경우 클래스 정의 외부에 있는 인스턴스에 속성 또는 메서드를 추가할 수 있습니다. 예를 들어, 다음 코드에서는 Protean 클래스의 인스턴스를 만들고 aString 속성과 aNumber 속성을 해당 인스턴스에 추가합니다.
var myProtean:Protean = new Protean(); myProtean.aString = "testing"; myProtean.aNumber = 3; trace(myProtean.aString, myProtean.aNumber); // 테스트 3
동적 클래스의 인스턴스에 추가한 속성은 런타임 엔터티이므로 모든 유형 검사는 런타임에 수행됩니다. 이러한 방법으로 추가한 속성에 유형 약어를 추가할 수 없습니다.
함수를 정의하고 해당 함수를 myProtean 인스턴스의 속성에 추가하여 myProtean 인스턴스에 메서드를 추가할 수도 있습니다. 다음 코드에서는 trace 문을 traceProtean() 메서드로 이동합니다.
var myProtean:Protean = new Protean();
myProtean.aString = "testing";
myProtean.aNumber = 3;
myProtean.traceProtean = function ()
{
trace(this.aString, this.aNumber);
};
myProtean.traceProtean(); // 테스트 3
그러나 이렇게 만든 메서드에서는 Protean 클래스의 모든 전용 속성 또는 메서드에 액세스하지 못합니다. 또한 Protean 클래스의 공용 속성 또는 메서드에 대한 참조를 this 키워드 또는 클래스 이름으로 정규화해야 합니다. 다음 예제에서는 Protean 클래스의 전용 및 공용 변수에 액세스하려고 하는 traceProtean() 메서드를 보여 줍니다.
myProtean.traceProtean = function ()
{
trace(myProtean.privateGreeting); // undefined
trace(myProtean.publicGreeting); // hello
};
myProtean.traceProtean();
Flash CS3
이 페이지에 의견 추가되면 전자 메일 알림 받기 | 의견 보고서
현재 페이지: http://livedocs.adobe.com/flash/9.0_kr/main/00000046.html