我阅读了一些关于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]);
我在谷歌浏览器中测试了这个方法,似乎很有效,但是我有点怀疑,因为它实现得太容易了,是否会带来一些缺点。
考虑到整个代码中没有其他用途使用 valueOf
方法,你认为有没有任何不利之处?