1 votes

comment remplacer une fonction setter au moment de l'exécution dans actionscript ?

J'ai une classe AS avec des fonctions setter et getter. Je dois modifier l'une des instances de cette classe pour que sa fonction setter traite l'entrée avant de l'affecter à la variable locale.

ou, de manière plus élaborée, que dois-je utiliser à la place de $$$ dans l'exemple ci-dessous ?

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);
}

0voto

dirkgently Points 56879

Pourquoi ne pas passer à l'instance une entrée traitée ?

mc.legend = process(legend);

Si cela n'est pas possible, vous pouvez modifier le setter dans MyClass et prendre un booléen optionnel pour effectuer le traitement.

function set legend(legend:Array, flag:bool = false):void{
            _legend = flag ? process(legend) : legend;
}

Notez que l'héritage des prototypes ne se limite pas à une instance particulière. Extrait de la documentation :

Héritage par prototype - il s'agit du seul mécanisme d'héritage dans les versions précédentes d'ActionScript et il sert de forme alternative d'héritage dans ActionScript 3.0. Chaque classe possède un objet prototype associé, et les propriétés de l'objet prototype sont partagées par toutes les instances de la classe.

0voto

Luke Points 6072

Normalement, vous devriez sous-classer MyClass pour modifier le comportement (polymorphisme) 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;
        }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X