2010-03-05 1 views
1

Из-за некоторых ограничений (example) во встроенном классе ActionScript 3 Dictionary Я ищу для создания оболочки, которая добавляет такие вещи. Можно ли сохранить синтаксис ниже для моего пользовательского класса, и если да, то каким образом?Пользовательские классы ActionScript: Синтаксис сахара

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

ответ

2

Да, вы можете с помощью 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"]); 
+0

Спасибо, но накладные расходы производительности не стоит. Я соглашусь с функциями add() и remove() :) –