A类的对象 能做 B类的属性吗?(当做hash表的key来用)

CCDDzclxy 2016-03-11 04:25:51
RT
我的测试代码:

<html>

<script type="text/javascript">

var g_obj = {};

function TObj()
{
this.Fi = 0;
this.Fj = 0;
}

window.onload = function()
{
var obj1 = new TObj();
obj1.Fi = 1;
obj1.Fj = 2;

var obj2 = new TObj();
obj2.Fi = 3;
obj2.Fj = 4;

g_obj[obj1] = 1;
g_obj[obj2] = 3;
g_obj["A"] = "字符作为类的属性";

for(var i in g_obj)
{
console.log(i+" ==> "+g_obj[i]);
}
};

</script>
</html>

如上面代码所示,我用 字符"A",作为 g_obj 的属性 是OK的。
然后我想,用 obj1 和 obj2 也作为 g_obj的属性,这样当做hashTable来用,然而不行,属性名都是一样的 字符串"[object Object]",区分不了 obj1 和 obj2。
有什么方式能让 obj1 和 obj2 直接作为 hash的key吗?

上面代码的输出为(chrome):

[object Object] ==> 3
A ==> 字符作为类的属性





...全文
154 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CCDDzclxy 2016-03-13
  • 打赏
  • 举报
回复
感谢各位,大家的意见我已经基本明白。 只有这位兄台的意见 我不是很明白,请明示,谢谢
引用 2 楼 KK3K2005 的回复:
去看下什么是集合
KK3K2005 2016-03-13
  • 打赏
  • 举报
回复
引用 7 楼 CCDDzclxy 的回复:
感谢各位,大家的意见我已经基本明白。 只有这位兄台的意见 我不是很明白,请明示,谢谢
引用 2 楼 KK3K2005 的回复:
去看下什么是集合
我看你的代码 和你的提问 我觉得 你其实最终只是选择错了容器 用数组作为容器就不会有这个问题了 g_obj作为一个集合容器 如果不需要key/value的话 用数组 因为
似梦飞花 2016-03-12
  • 打赏
  • 举报
回复
或者在写个对象记录obj和key的关系
似梦飞花 2016-03-12
  • 打赏
  • 举报
回复
重写toString
hch126163 2016-03-12
  • 打赏
  • 举报
回复
属性名必须是字符串 可以为TObj类重写toString方法。让它返回一个有唯一性标识字符串 也可以写一个函数获取一个标识字符串,绑定属性时,调用此函数
天际的海浪 2016-03-12
  • 打赏
  • 举报
回复
其实最好的方案是用 ES6标准中的 Map对象,只不过要在ie11等最新的浏览器中才支持。 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map
KK3K2005 2016-03-11
  • 打赏
  • 举报
回复
去看下什么是集合
天际的海浪 2016-03-11
  • 打赏
  • 举报
回复
属性名必须是字符串 可以为TObj类重写toString方法。让它返回一个有唯一性标示的字符串

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧