Класс Dictionary (flash.utils.Dictionary) — новое дополнение в ActionScript. Он представляет собой то же самое, что и базовые объекты Object, за исключением одной особенности: в объектах Dictionary в качестве имен свойств (ключей) могут быть использованы не только строки, но и любые другие значения.
Базовые объекты ActionScript используют строковые ключи (имена) для определения свойств. Если для ключа используется не строковое значение, оно интерпретируется как его строковое представление. Пример:
This content requires Adobe Flash Player.
Если вы попытаетесь использовать несколько разных объектов в качестве ключей в базовом объекте, что вы получите, так это строковое представление каждого из них. Это значит, что, хотя вы и используете для ключей различные объекты, в контейнере это будет один и тот же ключ, ссылающийся на единственное значение.
This content requires Adobe Flash Player.
Класс Dictionary подобного ограничения не имеет. В качестве ключа вы можете использовать любое значение, которое будет полностью представлять этот ключ, в отличие от строкового представления. Таким образом, если в примере выше использовать экземпляр Dictionary, вы получите два различных ключа, по одному для каждого объекта.
This content requires Adobe Flash Player.
И несмотря на то, что вы все же получили [object Object] при трассировке, это просто результат строкового преобразования в команде trace; это уникальный объектный ключ в экземляре Dictionary.
Обратите внимание, что prop здесь определена как *. Это важно, т.к. ключи в объекте dict могут быть любого типа. Если вы используете String как тип prop, объекты a и b при их выборке в цикле будут приводиться к строкам, помещая в prop «[object Object]» вместо действительных ссылок на a и b, которыми они должны быть для корректного доступа к значениям 1 и 2 из dict. Для базовых объектов, независимо от типа, используемого для prop, вы всегда будете получать String.