|
|
|

24.04.2013, 04:48
|
 |
Профессор
|
|
Регистрация: 18.01.2013
Сообщений: 1,098
|
|
|
Пасоны, можно ли такое использовать в реальном проекте если заморозить toString?
я про замену 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] );
Последний раз редактировалось megaupload, 24.04.2013 в 08:20.
|
|
|

24.04.2013, 09:14
|
 |
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
|
Я считаю, что если человек переопределяет стандартный метод или объект, то его нужно сжечь это его проблемы.
|
|
|

24.04.2013, 14:03
|
 |
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,618
|
|
|
С массивами не сработает.
__________________
29375, 35
|
|
|

24.04.2013, 19:13
|
 |
Профессор
|
|
Регистрация: 18.01.2013
Сообщений: 1,098
|
|
Ну а вот это, убого смотрится или норм?
hash.objects = [];
function hash (value) {
var index = hash.objects.indexOf(value);
if (index === -1) {
index = hash.objects.push(value) - 1;
}
return '_hash:' + index
}
var map = {};
var key = {};
var key2 = {};
map[hash(key)] = 5;
map[hash(key2)] = 'ololo';
alert(map[hash(key)]);
alert(map[hash(key2)]);
но память не очищается...
Последний раз редактировалось megaupload, 24.04.2013 в 19:18.
|
|
|

24.04.2013, 22:49
|
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
У меня есть реализация объекта Map из ES6, может пригодится
Object.prototype
Вообще переопределение нативных методов это зло, особенно если твой код будут использовать другие.
Переопределять можно, но только для дебага.
Например если нужно провести профилирование приложения и подсчитать обработчики на элементах и пр. события.
Последний раз редактировалось monolithed, 24.04.2013 в 22:55.
|
|
|

24.04.2013, 22:53
|
 |
Профессор
|
|
Регистрация: 18.01.2013
Сообщений: 1,098
|
|
|
ну блин эти сеты и геты думаеш удобно кому? так и любой может сделать, суть то в том чтобы сахарно было))
|
|
|

25.04.2013, 00:00
|
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
|
Сообщение от megaupload
|
|
ну блин эти сеты и геты думаеш удобно кому?
|
А в чем не удобство?
Если тебе нужен сахар пиши на ruby, тот же JS только с кучей сахара
|
|
|

25.04.2013, 00:42
|
 |
Профессор
|
|
Регистрация: 18.01.2013
Сообщений: 1,098
|
|
тебе не кажется что эта реализация раз в 100 круче быстрее и проще?
function hash (value) {
var index = hash.objects.indexOf(value);
if (index === -1) {
index = hash.objects.push(value) - 1;
}
return '_hash:' + index
}
hash.objects = [];
var map = {};
var key = {};
map[hash(key)] = 5;
alert( map[hash(key)] );
|
|
|

25.04.2013, 16:53
|
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
|
Сообщение от megaupload
|
|
тебе не кажется что эта реализация раз в 100 круче и проще
|
Выглядит ужасно
|
|
|
|