【问题标题】:Custom ActionScript classes: Syntax sugar自定义 ActionScript 类:语法糖
【发布时间】:2010-03-05 13:16:01
【问题描述】:

由于内置 ActionScript 3 Dictionary 类中的一些限制 (example),我希望构建一个添加此类内容的包装器。是否可以为我的自定义类保留以下语法,如果可以,如何?

var dic:MyDic = new MyDic();
dic[stuffy] = someObject;

【问题讨论】:

    标签: actionscript-3 syntactic-sugar


    【解决方案1】:

    是的,您可以使用 Proxy 函数,但会产生性能开销:

    import flash.utils.Dictionary;
    import flash.utils.Proxy;
    import flash.utils.flash_proxy;
    
    public class MyDict extends Proxy {
        private var _size:int = 0;
        private var _dict:Dictionary = new Dictionary();
    
        public function get size():int {
            return _size;
        }
    
        flash_proxy override function getProperty(name:*):* {
            return _dict[name];
        }
    
        flash_proxy override function setProperty(name:*, value:*):void {
            if (!_dict.hasOwnProperty(name))
                _size ++;
            _dict[name] = value;
        }
    
        flash_proxy override function deleteProperty(name:*):Boolean {
            if (_dict.hasOwnProperty(name)) {
                _size --;
                delete _dict[name];
                return true;
            }
            return false;
        }
    }
    
    var dict:MyDict = new MyDict();
    dict[1] = 2;
    dict["foo"] = "bar";
    trace(dict.size, dict[1], dict["foo"]);
    
    delete dict[1];
    trace(dict.size, dict[1], dict["foo"]);
    

    【讨论】:

    • 谢谢,但性能开销不值得。我将使用 add() 和 remove() 函数:)
    猜你喜欢
    • 2018-02-08
    • 1970-01-01
    • 2016-09-09
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 2011-04-21
    相关资源
    最近更新 更多