2009-09-09 3 views
-1

액션 스크립트 3에서 개발할 때, 나는 파이썬의 __getattr__/__setattr__ 마법과 같은 방법으로 뭔가를 얻을 수있는 방법을 찾고 있습니다. 즉, 인스턴스에서 속성 조회를 가로 채고 사용자 지정 작업을 수행 할 수 있습니다.ActionScript 3에서 속성 가져 오기/설정을 가로채는 것이 가능합니까?

ActionScript 3에서이를 달성 할 수있는 방법이 있습니까? AS3에서 속성 조회는 일반 (봉인 된) 클래스와 동적 클래스에서 약간 다르게 동작합니다. 두 경우 모두 동일한 방식으로 작동하는 것이 이상적입니다. 파이썬에서는 모든 종류의 객체 (물론!)에 대해서도 아름답게 작동합니다. 심지어는 dict 자체의 서브 클래스에 대해서도!

답변

0

flash.utils.Proxy 개체를 찾으십시오.

프록시 클래스는 작업 객체에 (예 : 검색 및 수정 속성으로) 액션의 기본 동작을 재정의 할 수 있습니다.

+0

pigiuz - 당신은 단지를 확장하여 사용할 수 있기 때문이다. 이것은 지나치게 제한적입니다 ... AS3이 다중 상속을 지원하지 않는다면 Proxy를 사용하여 다른 유형을 확장 할 때 GetProperty/setProperty 비헤이비어를 재정의 할 수 없습니다. –

0

as3에서는 명시 적 변수의 접근자를 코딩 할 수 있습니다. ex Class1 :

private var __myvar : String;

public function get myvar() : String {return __myvar; } 공용 함수 세트 myvar (value : String) : void {__myvar = value; }

이제 Class1 인스턴스를 만들 때 접근 자 함수를 통해 __myvar에 액세스 할 수 있습니다. var에 바인더 블을 설정하려면 [Bindable] 키워드를 해당 접근 자 중 하나에 지정해야합니다. 더 나아가 getter 또는 setter 만 구현할 수도 있으므로 var는 읽기 또는 쓰기 만 가능합니다. 난이 도움이되기를 바랍니다 ) 내가 flash.utils.Proxy의 잊어 경향이

+0

하지만 선험적으로 필요한 부동산이 무엇인지 모르는 경우에는 어떻게해야합니까? 나는. 동적 객체 개체, 사전? import flash.utils.Dictionary; var d : 사전 = 새 사전; d [ "abc"] = 123; //이 set 속성을 인터셉트하는 방법은 무엇입니까? trace (d [ "abc"]); //이 속성을 가로채는 방법? 기본 개체의 본질을 여전히 잃지 않고 사전 (또는 하위 클래스)에서 계속 작동해야합니다. 즉 사전을 사용하여 수행 할 수있는 작업을 계속 수행 할 수 있습니다. 키를 반복 할 때 : for (var key : Object in d) {trace (key, d [key]); } –

+0

as3은 각 속성에 접근자를 작성하거나 프록시 객체 방법을 사용하지 않는 한 불가능합니다. 더러운 임시 해결책은 개인 배열, 사전 또는 손으로 직접 만든 접근자를 통해 액세스 권한을 부여하는 모든 것을 래핑하는 MyInterceptorArray 또는 MyInterceptorDictionary와 같은 각 기본 데이터 형식에 대한 래퍼 클래스를 작성할 수 있습니다. 이런 식으로 데이터 구조를 구현하는 멋진 lib (http://code.google.com/p/as3ds)가 있습니다. as3은 파이썬 언어가 아니며 Java 코딩과 훨씬 유사하며 동적 객체는 대부분 나쁜 프로그래밍 방식입니다. – pigiuz

관련 문제