收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 1660|回复: 9

[AS3] 请教一个有关object类型变量的问题

[复制链接]
发表于 2009-8-21 10:09:05 | 显示全部楼层 |阅读模式

  1. var obj:Object = new Object();
  2. var a:Object = new Object();
  3. var b:Object = new Object();
  4. obj["name"] = 1; // 这里可以输出值
  5. obj[1] = 2; //这里可以输出值
  6. obj[a] = 5; //为什么这里却被下面的obj[new Object()] = 3覆盖掉了?而上面的obj["name"] = 1;与obj[1] = 2;却没有被覆盖掉?
  7. obj[b] = 6;//为什么这里却被下面的obj[new Object()] = 3覆盖掉了?而上面的obj["name"] = 1;与obj[1] = 2;却没有被覆盖掉?

  8. obj[new Object()] = 3; // key new Object() converted to "[object Object]"
  9. for (var prop:String in obj) {
  10.      trace("prop "+prop); // traces: [object Object], 1, name
  11.      trace("obj[prop] "+obj[prop]); // traces: 3, 2, 1
  12. }
复制代码


我的问题在注释部份。谢谢!
发表于 2009-8-21 11:25:12 | 显示全部楼层
var a:Object = new Object();
var b:Object = new Object();
obj[a] = 5;
obj = 6;
obj[new Object()] = 3;

a,b是一个变量,是用来指向内存中new Object()的,最后new Object =3 才是最终的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-21 11:43:07 | 显示全部楼层
嗯,明白了。谢谢版主。
回复 支持 反对

使用道具 举报

发表于 2009-8-21 17:41:27 | 显示全部楼层
不是字典数组,所以toString造成的这个问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-22 11:58:40 | 显示全部楼层
原帖由 [i]0xFF336699 于 2009-8-21 17:41 发表
不是字典数组,所以toString造成的这个问题


原来是这样,谢谢你的回复!
回复 支持 反对

使用道具 举报

发表于 2009-8-22 14:34:59 | 显示全部楼层
4楼正解,原因在toString上

加一句 b.toString=function(){return "BBB"}; b就不会被覆盖,就更容易理解了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-22 15:13:56 | 显示全部楼层
原帖由 [i]flash023 于 2009-8-22 14:34 发表
4楼正解,原因在toString上

加一句 b.toString=function(){return "BBB"}; b就不会被覆盖,就更容易理解了



如果需要b.toString,那在一开始将变量b命名为字符串类型的变量不就可以了吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-22 15:31:49 | 显示全部楼层
我想我的问题也许用以下代码可以说明

  1. var dic:Dictionary=new Dictionary()
  2. dic[new Object()] = 1
  3. dic[new Object()] = 2


  4. for (var prop:* in dic) {
  5.     trace("prop "+prop);
  6.     trace("dic[prop] "+dic[prop]);
  7. }





  8. var obj:Object=new Object()
  9. obj[new Object()]=3
  10. obj[new Object()]=4


  11. for (var prop2:* in obj) {
  12.     trace("prop2 "+obj);
  13.     trace("obj[prop2] "+obj[prop2]);
  14. }
复制代码


为什么字典可以输出每一个新建的Object对象的值,而Object对象本身却只能输出最后一个new Object()的值呢?

谢谢!

[[i] 本帖最后由 zero09 于 2009-8-22 15:33 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2009-8-22 21:14:04 | 显示全部楼层
字典的索引支持多种类型, Object的索引只支持字符串,不是字符串的对象,也会被强制转换成字符串也就是toString
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-23 17:42:54 | 显示全部楼层
原帖由 [i]flash023 于 2009-8-22 21:14 发表
字典的索引支持多种类型, Object的索引只支持字符串,不是字符串的对象,也会被强制转换成字符串也就是toString



原来是这样嚯。呵。完全明白了。谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( ICP05002321 )  

GMT+8, 2019-5-21 09:33 , Processed in 0.093750 second(s), 9 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表