
Код AS3:
package
{
import flash.display.Sprite;
/**
* TestFunkyAggregator class.
* @author wvxvw
*/
public class TestFunkyAggregator extends Sprite
{
public function TestFunkyAggregator()
{
super();
var fooAggregator:FunkyMethodAggregator = new FunkyMethodAggregator("foo");
var barAggregator:FunkyMethodAggregator = new FunkyMethodAggregator("bar");
fooAggregator.foo();
try
{
fooAggregator.bar();
}
catch (error:Error)
{
trace(error.message);
}
barAggregator.bar();
try
{
barAggregator.foo();
}
catch (error:Error)
{
trace(error.message);
}
}
}
}

Код AS3:
package
{
import flash.utils.Proxy;
import flash.utils.flash_proxy;
use namespace flash_proxy;
/**
* FunkyMethodAggregator class.
* @author wvxvw
*/
public dynamic class FunkyMethodAggregator extends Proxy
{
private var _fancyID:String;
public function FunkyMethodAggregator(fancyID:String)
{
super();
_fancyID = fancyID ? fancyID : "foo";
}
private var fancyFunction:Function = function(...rest):void
{
trace("This time my name is: " + rest[0]);
}
override flash_proxy function callProperty(name:*, ...rest):*
{
switch (String(name))
{
case "bar":
if (_fancyID == "foo")
{
throw new Error("bar is not a valid method of FunkyMethodAggregator");
}
rest.unshift(name);
return fancyFunction.apply(this, rest);
case "foo":
if (_fancyID != "foo")
{
throw new Error("bar is not a valid method of FunkyMethodAggregator");
}
rest.unshift(name);
return fancyFunction.apply(this, rest);
}
}
}
}
