2009-03-02 39 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中的替代继承形式。每个类都有一个关联的原型对象,原型对象的属性由该类的所有实例共享。

相关问题