Я прочитал несколько вопросов и ответов о реализации словаря javascript, но они не отвечают моим требованиям:
- словарь должен иметь возможность принимать объекты в качестве ключей
- значения должны быть доступны оператору []
. Поэтому мне пришла в голову идея перезаписать метод "valueOf" в Object.prototype следующим образом:
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 не используется для других целей во всем коде, как вы думаете, есть ли недостатки?