2010-07-02 28 views
1

好吧,所以這是一個奇怪的...Actionscript-3名稱空間和動態類型?

是否可以將名稱空間成員添加到匿名或動態類型?比方說,如果你想「內置」內置類型爲「感動」,例如?

此前我曾想過爲StyleSheets及其內部樣式添加隱藏成員,並想知道如何防止它們被覆蓋或序列化或其他。我放棄了,因爲還有很多其他的方式可以做我想做的事情,並期限很長 - 但我仍然想知道它是否可行?

我一直很努力,但我沒有運氣...

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); 

在最新的Flex 4 SDK沒有什麼工作對我來說...

回答

1

我建議你做這樣的:

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 

請注意,這是相對昂貴的,但實際上表現相當好。弱關鍵字詞典以及靜態調用都是在性能危急情況下應該避免的。

格爾茨
back2dos

+0

這比實際修改目標好得多。我感到很蠢,因爲沒有早點想到它,謝謝back2dos。 – 2010-07-03 00:03:36

相關問題