Простите за сумбурную формулировку, не знаю точно как назвать это и буду рад правильной
Я сделал что-то типа сценария
Каждый айтем которого это объект с ссылкой на класс, строковым представлением метода этого объекта и данными для этого метода
У айтема есть метод execute - он запускает метод объекта

Код AS3:
function execute():void
{
currentItem.class[currentItem.classMethod](currentItem.methodData)
}
как запустить сеттер класса а не метод ?
Вот мой код
Айтем сценария

Код AS3:
package com.div0.managers.scenario
{
import flash.events.Event;
import flash.events.EventDispatcher;
import mx.utils.ObjectUtil;
import mx.utils.OnDemandEventDispatcher;
public class ScenarioItem extends EventDispatcher
{
protected var _class:Object;
protected var _classMethod:String;
protected var _data:Object;
protected var _onComplete:Object;
public function ScenarioItem(itemClass:Object, classMethod:String, data:Object=null, onComplete:Object=null)
{
_class=itemClass;
_classMethod=classMethod;
_data=data;
_onComplete=onComplete;
}
public function get itemClass():Object
{
return _class;
}
public function get methodName():String
{
return _classMethod;
}
public function get data():Object
{
return _data;
}
public function execute():void
{
EventDispatcher(_class).addEventListener(Event.COMPLETE,commandExecutionCompleteHandler);
if(_data)
{
_class[_classMethod](_data);
}
else
{
_class[_classMethod]();
}
}
protected function commandExecutionCompleteHandler(event:Event):void
{
EventDispatcher(_class).removeEventListener(Event.COMPLETE,commandExecutionCompleteHandler);
if(_onComplete)
{
if(_onComplete.completeEventReceiver)
{
if(_onComplete.receiverMethod)
{
_onComplete.completeEventReceiver[_onComplete.receiverMethod](_onComplete.methodData);
}
}
}
dispatchEvent(new Event(Event.COMPLETE));
}
}
}
Сценарий

Код AS3:
package com.div0.managers.scenario
{
import flash.events.Event;
import flash.events.EventDispatcher;
import mx.utils.ObjectUtil;
public class Scenario
{
private static var instance:Scenario;
protected var _items:Vector.<ScenarioItem>=new Vector.<ScenarioItem>();
protected var _counter:int=0;
public static function getInstance():Scenario
{
if (instance == null)
{
instance = new Scenario();
}
return instance;
}
public function addItem(item:ScenarioItem):void
{
_items.push(item);
trace("\nscenario total items :"+_items.length);
for(var i:int=0;i<_items.length;i++)
{
trace(" ITEM "+_items[i].itemClass+" method "+_items[i].methodName+" data:"+_items[i].data);
}
}
public function clear():void
{
_items=new Vector.<ScenarioItem>();
_counter=0;
}
public function start():void
{
if(_items.length>0)
{
proceedItem();
}
}
public function push(item:ScenarioItem):void
{
_items.push(item);
_counter++;
proceedItem();
}
public function addMultyply(items:Vector.<ScenarioItem>):void
{
_items.push(items);
_counter++;
proceedItem();
}
protected function proceedItem():void
{
trace("SCENARIO executing "+_items[_counter].methodName);
EventDispatcher(_items[_counter]).addEventListener(Event.COMPLETE,itemCompleteHandler);
_items[_counter].execute();
}
protected function itemCompleteHandler(event:Event):void
{
trace("scenario item complete");
EventDispatcher(_items[_counter]).removeEventListener(Event.COMPLETE,itemCompleteHandler);
_items[_counter]=null;
_counter++;
if(_counter<_items.length)
{
proceedItem();
}
}
}
}