fis*_*one 11 javascript dictionary hashtable
我读了一些关于javascript字典实现的问题和答案,但它们不符合我的要求:
所以我提出了在Object.prototype中覆盖"valueOf"方法的想法,如下所示:
Object.__id__ = 0;
Object.prototype.valueOf = function() {
if(!this.__id__)
this.__id__ = ++Object.__id__;
return "__id__" + this.__id__;
}
Object.prototype.toString = Object.prototype.valueOf;
//test
var x = {p1: "5"};
var y = [6];
var z = {};
z[x] = "7";
z[y] = "8";
console.log(z[x], z[y]);
Run Code Online (Sandbox Code Playgroud)
我用google-chrome进行了测试,看起来效果很好,但我有点怀疑,这是否会带来一些弊端,因为它很容易实现.
考虑到valueOf方法在整个代码中没有用于其他目的,您认为有任何缺点吗?
这是一个有趣的想法.我建议我的jshashtable.它符合您的第一个要求,但不是第二个要求.我真的没有看到坚持使用方括号属性访问符号的优点:你有特殊要求吗?
使用jshashtable,您可以为Hashtable构造函数提供散列函数.该函数传递一个要用作键的对象,并且必须返回一个字符串; 您可以使用与您所拥有的功能不同的功能,而无需触摸Object.prototype.
你的想法有一些缺点:
valueOf方法将显示在for...in任何本机对象的循环中;