Многие из разработчиков обычно мало задумываются над тем в чем же состои разница между этими двумя типами данных в actionscript 3.0.
На самом деле различия не такие уж и тайные и непонятные.
Самое главное различие в этих двух типах это то что в типе Object ключом может быть только String, пример:
var str:String = 'text';
var obj:Object = new Object();
obj[str] = some target;
var obj:Object = new Object();
obj[str] = some target;
Но большинство обычно скажут что это не все и можно сделать еще и так:
var spr:Sprite = new Sprite;
var obj:Object = new Object();
obj[spr] = some target;
var obj:Object = new Object();
obj[spr] = some target;
Да действительно, такое написание будет работать, но оно будет эквивалентно:
obj[spr.toString()] = some target;
так что ключь Object может быть только String.
В противовес этого в Dictionary ключом может быть любой объект не теряя своих свойств и методов.
Для подтверждения можно провести эксперимент:
package
{
import flash.display.Sprite;
import flash.utils.Dictionary;
public class Main extends Sprite
{
public function Main()
{
//рисуем Sprite
var spr:Sprite = new Sprite;
spr.graphics.beginFill(0,1);
spr.graphics.drawRect(0,0,100,100);
spr.graphics.endFill();
addChild(spr); //добавляем Sprite в список видимости
var obj:Dictionary = new Dictionary();
obj[spr] = 1;
for(var f:* in obj)
f.visible = false;
//используем ключ как ссылку на Sprite и все работает, он становится невидимым
}
}
}
А теперь тоже самое но только с Object:
package
{
import flash.display.Sprite;
import flash.text.TextField;
public class Main extends Sprite
{
public function Main()
{
var spr:Sprite = new Sprite;
spr.graphics.beginFill(0,1);
spr.graphics.drawRect(0,0,100,100);
spr.graphics.endFill();
addChild(spr);
var obj:Object = new Object();
obj[spr] = 1;
for(var f:* in obj)
f.visible = false;
// будет ошибка ReferenceError: Error #1056: Не удается создать свойство visible в String.
}
}
}
Как мы можем видеть Dictionary гораздо функциональнее, осталось проверить производительность....
Комментариев нет:
Отправить комментарий
Поделиться своими мыслями...