デリゲーとっぽいの

by 3f5
変数の名前が変なのは気にしないでください
♥0 | Line 38 | Modified 2011-05-07 16:12:47 | MIT License
play

ActionScript3 source code

/**
 * Copyright 3f5 ( http://wonderfl.net/user/3f5 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/br3a
 */

package {
    import flash.text.TextField;
    import flash.display.Sprite;
    public class DelegateTest extends Sprite {
        public function DelegateTest() {
            var delegate:Delegate = new Delegate();
            
            delegate.add('Test', function (str:String):void {
                var text:TextField = new TextField();
                text.text = str;
                addChild(text);
            });

            delegate.call('Test', 'Hello World');
        }
    }
}

    class Delegate 
    {
        private var callbacks:Object;

        public function Delegate() 
        {
            callbacks = {};
        }
        
        public function add(delegateName:String, callback:Function):void
        {
            if (!callbacks.hasOwnProperty(delegateName)) {
                callbacks[delegateName] = [];
            }
            
            callbacks[delegateName].push(callback);
        }
        
        public function call(delegateName:String, ...args):void
        {
            if (!callbacks.hasOwnProperty(delegateName)) return;

            var callback:Function;

            for each (callback in callbacks[delegateName]) {
                callback(args);
            }
        }
    }