Como substituo uma função de setter no tempo de execução no ActionScript?
-
03-07-2019 - |
Pergunta
Eu tenho uma classe AS com funções Setter e Getter. Preciso ajustar uma das instâncias desta classe para que a função Setter processe a entrada antes de atribuí -la à variável local.
Ou, de uma maneira mais elaborada, o que devo usar em vez de $$$ no exemplo abaixo?
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);
}
Solução
Normalmente, você subclasse MyClass para modificar o comportamento (polimorfismo) da 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;
}
}
Outras dicas
Por que você não passa na instância uma entrada processada?
mc.legend = process(legend);
Se isso não for possível, você pode modificar o setter no MyClass e tomar um booleano opcional para fazer processamento.
function set legend(legend:Array, flag:bool = false):void{
_legend = flag ? process(legend) : legend;
}
Observe que a herança do protótipo não se restringe a uma instância específica. Da documentação:
A herança do protótipo - é o único mecanismo de herança nas versões anteriores do ActionScript e serve como uma forma alternativa de herança no ActionScript 3.0. Cada classe possui um objeto de protótipo associado e as propriedades do objeto de protótipo são compartilhadas por todas as instâncias da classe.