Comment puis-je remplacer une fonction de définition au moment de l'exécution dans ActionScript?

StackOverflow https://stackoverflow.com/questions/602590

Question

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’assigner à 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);
}
Était-ce utile?

La solution

Normalement, vous devez 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;
        }
}

Autres conseils

Pourquoi ne transmettez-vous pas à l'instance une entrée traitée?

mc.legend = process(legend);

Si cela n’est pas possible, vous pouvez modifier le configurateur dans MyClass et utiliser un booléen facultatif pour effectuer le traitement.

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

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

  

Héritage de prototype: il s'agit du seul mécanisme d'héritage des versions précédentes d'ActionScript. Il constitue une autre forme d'héritage dans ActionScript 3.0. Chaque classe a un objet prototype associé et ses propriétés sont partagées par toutes les instances de la classe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top