我了解JavaScript的字典实现的一些问题和答案,但他们并不满足我的要求:解决方法: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]);
我用google-chrome测试了它,它似乎工作的很好,但我有点怀疑,这是否会造成一些缺点,因为它很容易实现。
考虑到valueOf方法在整个代码中没有用于其他目的,你认为有什么缺点吗?
我以前总是使用你的图书馆,它运作良好。但是目前我正在开发一个ActionScript 3 to Javascript转换器。 AS3提供了一个词典。如果我使用你的库,我需要检查类型并用get/set替换括号。如果我使用Object,valueOf不会出现在...中,但是如果我定义了一个新的“class”,它就会出现。 (也许这种行为在其他浏览器中有所不同)。 因为我不喜欢覆盖Object.prototype.valueOf本身,你回答我的问题 – fishbone 2010-07-27 19:14:07