Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.04.2013, 04:48
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 24.04.2013, 09:14
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Я считаю, что если человек переопределяет стандартный метод или объект, то его нужно сжечь это его проблемы.
__________________
kobezzza
code monkey
Ответить с цитированием
  #3 (permalink)  
Старый 24.04.2013, 14:03
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

С массивами не сработает.
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 24.04.2013, 19:13
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 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.
Ответить с цитированием
  #5 (permalink)  
Старый 24.04.2013, 22:49
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

У меня есть реализация объекта Map из ES6, может пригодится

Object.prototype

Вообще переопределение нативных методов это зло, особенно если твой код будут использовать другие.
Переопределять можно, но только для дебага.
Например если нужно провести профилирование приложения и подсчитать обработчики на элементах и пр. события.

Последний раз редактировалось monolithed, 24.04.2013 в 22:55.
Ответить с цитированием
  #6 (permalink)  
Старый 24.04.2013, 22:53
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

ну блин эти сеты и геты думаеш удобно кому? так и любой может сделать, суть то в том чтобы сахарно было))
Ответить с цитированием
  #7 (permalink)  
Старый 25.04.2013, 00:00
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от megaupload
ну блин эти сеты и геты думаеш удобно кому?
А в чем не удобство?
Если тебе нужен сахар пиши на ruby, тот же JS только с кучей сахара
Ответить с цитированием
  #8 (permalink)  
Старый 25.04.2013, 00:42
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 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)] );
Ответить с цитированием
  #9 (permalink)  
Старый 25.04.2013, 16:53
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от megaupload
тебе не кажется что эта реализация раз в 100 круче и проще
Выглядит ужасно
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск