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);
}
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top