Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопрос про Proxy (ES5 Harmony) (https://javascript.ru/forum/misc/25738-vopros-pro-proxy-es5-harmony.html)

Mахmахmахimus 14.02.2012 01:45

Вопрос про Proxy (ES5 Harmony)
 
(function() {
	var proxy = Proxy.create({
		get : function(proxy, name) {
			if (name < 0 && proxy.length + +name >= 0) {
				return proxy[proxy.length + +name]
			}
		}
	});

	window['arr'] = function() {
		var arr = Array.apply(this, arguments);
		arr.__proto__ = proxy;
		return arr;
	}
})();

var q = arr(1, 2, 3, 4, 5, 6, 7, 8, 9)

alert(q[0])
alert(q[1])
alert(q[2])

alert(q[-1])
alert(q[-2])
alert(q[-3])


при литеральной нотации используется родной конструктор Array.
Как научиться перехватывать запросы с отрицательными числами на ВСЕ массивы, созданные даже вот так [1,2,3] ?

Второй вопрос, как покрасивее сохранить методы массивов? или вообще все придется переписывать?

Mахmахmахimus 14.02.2012 02:58

Блин, че то я затупил) а не проще ли ретурнить прокси обьект а массив держат в памяти)? у меня прокси лежит в прототипе массива) и если запрос проходит мимо массива, то его перехватывает прокси и смотрит отрицательное ли число запрашивалос, если да то снова возвращается к массову, достает от туда нужный элемент и ретурнит его))

не проще ли создавать обычный массив, потом создавать прокси и делать прототипом прокси обьекта массив и ретурнить прокси)????

блин какой же я мудак что сразу не допер! на то и название ПРОКСИ)! Вопрос снимаю.

Octane 14.02.2012 03:48

Proxy.create({
	get: function (proxy, i) {
		alert(i);
	}
}, [1, 2, 3])[-1];


только в стандарте отрицательные значения индексов уже вроде есть

----------------
что-то у меня еще нету Proxy в Chrome 19 dev, наверное какой-нибудь canary build надо качать

Mахmахmахimus 14.02.2012 03:58

А можно как то пруф или ссылку где видел об этом?

Octane 14.02.2012 04:30

https://github.com/DmitrySoshnikov/es-laboratory


Часовой пояс GMT +3, время: 03:27.