如何在actionscript中覆盖运行时的setter函数?
-
03-07-2019 - |
题
我有一个带有setter和getter函数的AS类。 我需要调整这个类的一个实例,这样它的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);
}
解决方案
通常你会将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;
}
}
其他提示
为什么不将实例传递给已处理的输入?
mc.legend = process(legend);
如果无法做到这一点,您可以修改MyClass中的setter并使用可选的布尔值进行处理。
function set legend(legend:Array, flag:bool = false):void{
_legend = flag ? process(legend) : legend;
}
请注意,原型继承不会将自身限制为特定实例。来自文档:
原型继承 - 是以前版本的ActionScript中唯一的继承机制,在ActionScript 3.0中作为备用的继承形式。每个类都有一个关联的原型对象,原型对象的属性由该类的所有实例共享。
不隶属于 StackOverflow