2009-03-02 36 views
1

我有一個具有setter和getter函數的AS類。 我需要調整此類的實例之一,以便setter函數在將其分配給局部變量之前處理輸入。如何在運行時在actionscript中重寫setter函數?

或者更詳細地說,在下面的例子中我應該用什麼來代替$$$?

class MyClass{ 
    private var _legend:Array; 
    function set legend(legend:Array):void{ 
     _legend= legend; 
    } 
    function get legend():Array{ 
     return _legend; 
    } 
    function someFunction():void{ 
     foo(); 
    } 
} 
var mc:MyClass = new MyClass(); 
mc.someFunction = function():void{ 
    bar(); 
} 
mc.$$$ = new function(legend:Array):void{ 
    _legend = process(legend); 
} 

回答

0

正常情況下,您可以繼承MyClass以修改MyClass的行爲(多態性)。

class MySubClass extends MyClass { 
     function set legend(legend:Array):void{ 
       // do your checking here. Then call the 
       // setter in the super class. 

       super.legend = legend; 
     } 
} 
+0

所以,換句話說,我在找什麼是不可能的......? – 2009-03-04 08:27:58

0

爲什麼不通過實例處理的輸入?

mc.legend = process(legend); 

如果這是不可能的,您可以修改MyClass中的setter並採用可選的布爾值來處理。

function set legend(legend:Array, flag:bool = false):void{ 
      _legend = flag ? process(legend) : legend; 
} 

請注意,原型繼承不會將自身限制爲特定實例。從文檔:

原型繼承 - 是以前版本的ActionScript中唯一的繼承機制,並充當ActionScript 3.0中的替代繼承形式。每個類都有一個關聯的原型對象,原型對象的屬性由該類的所有實例共享。

相關問題