he leído un par de preguntas y respuestas acerca de las implementaciones de Javascript de diccionario, pero no cumple con mis requisitos:solución: javascript diccionario que lleva objetos como llaves
- el diccionario debe ser capaz de tomar los objetos como llaves
- los valores deben ser accesibles por el [] -operator
Así que se me ocurrió la idea para sobrescribir el -method "valueOf" en Object.prototype, de la siguiente manera:
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]);
Probé esto con google-chrome y parece funcionar bien, pero soy un poco escéptico, si esto causará algunos inconvenientes, ya que fue muy fácil de implementar.
Considerando que el método valueOf no se usa para otros fines en todo el código, ¿cree que existen desventajas?
Siempre he usado su biblioteca antes y funciona bien. Pero actualmente estoy trabajando en un convertidor de ActionScript 3 a Javascript. AS3 proporciona un diccionario. Si utilizo su biblioteca, necesitaría verificar los tipos y reemplazar los paréntesis con get/set. El valueOf no aparece en ... en si uso Object, pero aparece si defino una nueva "clase". (Tal vez este comportamiento sea diferente en otros navegadores). Como no me gusta sobrescribir Object.prototype.valueOf, respondió mi pregunta – fishbone