Domanda

Ho una classe AS con funzioni setter e getter. Devo modificare una delle istanze di questa classe in modo che la sua funzione setter elabori l'input prima di assegnarlo alla variabile locale.

o, in un modo più elaborato, cosa dovrei usare invece di $$$ nell'esempio qui sotto?

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);
}
È stato utile?

Soluzione

Normalmente sottoclassi MyClass per modificare il comportamento (polimorfismo) di 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;
        }
}

Altri suggerimenti

Perché non passi all'istanza un input elaborato?

mc.legend = process(legend);

Se ciò non è possibile, è possibile modificare il setter in MyClass e prendere un booleano opzionale per eseguire l'elaborazione.

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

Nota che l'ereditarietà del prototipo non si limita a un'istanza particolare. Dalla documentazione:

  

Eredità del prototipo: è l'unico meccanismo di ereditarietà nelle versioni precedenti di ActionScript e funge da forma alternativa di eredità in ActionScript 3.0. Ogni classe ha un oggetto prototipo associato e le proprietà dell'oggetto prototipo sono condivise da tutte le istanze della classe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top