я про замену toString, ведь если его заменят, то мой не будет работать.... но я думаю в этом уже будет виновата рукожопость того кто заменяет функции не сохраняя старый функционал
var Map = (function () {
var last = null;
var _toString = Object.prototype.toString;
Object.prototype.toString = function () {
last = this;
return _toString.apply(this, arguments);
};
function Map () {
this.keys = [];
this.values = [];
}
Object.defineProperty(Map.prototype, '[object Object]', {
get: function () {
var index = this.keys.indexOf(last);
return this.values[index];
},
set: function (value) {
var index = this.keys.indexOf(last);
if (index !== -1)
return this.values[index] = value;
this.keys.push(last);
this.values.push(value);
return value;
}
});
return Map;
})();
var map = new Map();
var key = {a:2};
var key2 = {b:3};
map[key] = 9999999;
map[key2] = 'ololo';
alert( map[key] );
alert( map[key2] );