2010-07-02 4 views
1

그래, 이건 이상한거야 ...Actionscript-3 네임 스페이스 및 동적 유형?

익명 또는 동적 유형에 네임 스페이스 멤버를 추가 할 수 있습니까? 예를 들어, 내장형을 "감동 (touched)"으로 "표시"하고 싶다면?

이전에 나는 StyleSheets과 내부 스타일에 숨겨진 멤버를 추가하는 것에 대해 생각하고 덮어 쓰거나 직렬화되는 것을 방지하는 방법을 궁금해했습니다. 나는 내가 원하는 것을 할 수있는 많은 다른 방법들이 있었기 때문에 마감했고, 마감 시간은 점점 짧아졌다. 그러나 그것이 여전히 실행 가능한지 알고 싶다.

답변

1

나를 위해 일한 ... 최신 플렉스 4 SDK 아무것도에

namespace mynamespace = "http://foo.bar/"; 
Object.prototype.test = "default"; 
Object.prototype.mynamespace::test = "mynamespace"; 

var o:Object = new Object(); 
trace(o.test); 
trace(o.mynamespace::test); 

... 내가 노력했지만 나는 운이 했어 난 당신과 같이 그것을 제안 :

package { 
    import flash.utils.Dictionary; 
    public class Annotations { 
     private static var annotations:Dictionary = new Dictionary(true); 
     public static function of(target:Object):Object { 
      var ret:Object = annotations[target]; 
      if (ret == null) annotations[target] = ret = Object; 
      return ret; 
     } 
    } 
} 

사용

var o:Object = new Object(); 
Annotations.of(o).foo = 1234; 
trace(Annotations.of(o).foo);//1234 

이것은 비교적 비싸지 만 실제로는 상당히 잘 수행됩니다. 약한 키 사전과 정적 호출은 성능에 치명적인 상황에서 피해야 할 일입니다. 실제로 목표를 수정하는 것보다 훨씬 낫다

greetz
back2dos

+0

. 나는 그것을 더 빨리 생각하지 않으면 바보가된다고 느낀다. –