¿Cómo puedo anular una función de establecimiento en tiempo de ejecución en ActionScript?
-
03-07-2019 - |
Pregunta
Tengo una clase AS con funciones de setter y getter. Necesito ajustar una de las instancias de esta clase para que la función de establecimiento procese la entrada antes de asignarla a la variable local.
o, de una manera más elaborada, ¿qué debo usar en lugar de $$$ en el siguiente ejemplo?
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);
}
Solución
Normalmente, sería una subclase de MyClass para modificar el comportamiento (polimorfismo) de 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;
}
}
Otros consejos
¿Por qué no le pasas a la instancia una entrada procesada?
mc.legend = process(legend);
Si esto no es posible, puedes modificar el configurador en MyClass y tomar un booleano opcional para hacer el procesamiento.
function set legend(legend:Array, flag:bool = false):void{
_legend = flag ? process(legend) : legend;
}
Tenga en cuenta que la herencia del prototipo no se limita a una instancia en particular. De la documentación:
Herencia de prototipo: es el único mecanismo de herencia en versiones anteriores de ActionScript y sirve como una forma alternativa de herencia en ActionScript 3.0. Cada clase tiene un objeto prototipo asociado, y todas las instancias de la clase comparten las propiedades del objeto prototipo.