Flex中的Object和Dictionary
其实Dictionary和Object很相像,用途也差不多是一样的,只是Object的key只能是字符串,就算赋值的时候不是,也会被转换为字符串的,Dictionary的key可以是任何类型。(Object的key都是被转换为字符串(String)类型理解的,当有多个Object对象,作为某个Object实例的key时,如果key对象的toString结果是一样的,那么得到的结果也是一样的),下面一个例子应该能多多少少说明这个问题:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applicationComplete="app(event)">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.FlexEvent;
private function app(event:FlexEvent):void{
var key1:Object = new Object();
var key2:Object = new Object();
var obj:Object = new Object();
obj[key1] = "a";
obj[key2] = "b";
var dict: Dictionary = new Dictionary();
dict[key1] = "a";
dict[key2] = "b";
//Result
Alert.show(obj[key1]); //b
Alert.show(obj[key2]); //b
Alert.show(dict[key1]); //a
Alert.show(dict[key2]); //b
}
]]>
</fx:Script>
</s:Application>
注:Object无论用什么类型的变量作为键,都将被转换成字符串。同时,如果你使用了不同的Object对象作为键,都会被转换成字符串"[object Object]"作为键,因此而指向了同一个数据。
参考:
http://michellewang.iteye.com/blog/1004276
http://hi.baidu.com/shin_tgdh/item/b7ad4d25087f840d77272c4c