时间:2021-07-01 10:21:17 帮助过:28人阅读
Object.prototype.valueOf = function()
{
alert("Hello~")
};
var map = [];
var obj = {};
map[obj] = 1;
结果很失望,对话框并没有跳出来,说明JS引擎没有尝试将obj对象转成数字。下面再尝试修改成toString方法:
代码如下:
Object.prototype.toString = function()
{
alert("Hello~")
};
var map = {};
var obj = {};
map[obj] = 1;
这时对话框跳出来了。当然我们没有返回数据,这个1就被保存在了map["undefined"]里面。但若我们返回一个数值,并且能保证每个变量唯一的数值,那么就可以用最原始的map[key]的方式索引任何类型了。我们重载Object的toString方法:
代码如下:
var HASH_ID = 0;
Object.prototype.toString = function()
{
if(this._HASH == null)
this._HASH = HASH_ID++;
return "Obj:" + this._HASH;
};
下面来测试一下:
代码如下:输出:Foo1 & Foo2 和 Bar1 & Bar2,这说明了obj1,obj2始终对应着同个索引。
var HashMap = {};
var obj1 = {};
var obj2 = {};
HashMap[obj1] = "Foo1";
HashMap[obj2] = "Foo2";
alert(HashMap[obj1] + " & " + HashMap[obj2]);
HashMap[obj1] = "Bar1";
HashMap[obj2] = "Bar2";
alert(HashMap[obj1] + " & " + HashMap[obj2]);
分别
当然,如果object自身重写了toString方法就不一定了,它也许每次返回都不一样的值。所以运用的时候,要根据实际情况做相应的调整。(2011/3/12)