Кто-нибудь еще использовал прокси ECMAScript? - PullRequest
10 голосов
/ 22 апреля 2011

Я пытаюсь освоить ESx (Гармония?) Прокси .Я думаю, что теперь я знаю основы, но не думаю, что смогу ими воспользоваться.

Кто-нибудь сумел использовать их для чего-то хорошего?Я не знаю ни одной библиотеки или чего бы то ни было, кто это сделал.

Ответы [ 7 ]

6 голосов
/ 15 ноября 2013

Для получения дополнительной информации о прокси, проверьте эту статью доцента Тома Ван Кутсема. Вместе с Марком Миллером из Google Том фактически сыграл ключевую роль в предложении прокси-серверов для включения в будущий стандарт ECMAScript во время его работы над проектом es-lab .

Далее, обратите внимание, что DirectProxies.js был заменен новым refle.js шим.

Наконец, посмотрите проект негатив-массив Синдре Сорхуса для примера простого варианта использования.


UPDATE:

Сегодня прошло почти 5 лет с тех пор, как был задан этот вопрос. Хотя в 2015 году они стали частью стандарта ECMAScript 2015 (он же ES6), многие браузеры до сих пор их не реализовали:

enter image description here

Если вы хотите узнать, какие браузеры поддерживают прокси к моменту чтения этого ответа, взгляните на CanIUse .

5 голосов
/ 27 января 2012

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

Естьпара примеров на странице оригинального предложения: http://wiki.ecmascript.org/doku.php?id=harmony:proxies

4 голосов
/ 27 января 2012

Вещи развились немного!Firefox изначально поддерживает Proxies.Используя реализацию harmony-refle.js , вы можете попробовать использовать прокси в соответствии с предложенной спецификацией Прямые прокси .Это работает с текущим Firefox или последней версией Chrome .

Возможный вариант использования: у вас есть объект, представляющий узел в графе, содержащий id, type и произвольного другого пользователясвойстваБиблиотека, рисующая этот узел на экране, хочет сохранить экранные координаты и аналогично непосредственно этому узлу.Возможно, это может перезаписать существующие свойства.

Теперь вы можете передать прокси в библиотеку чертежей, которая получает доступ к свойствам узла, связанным с чертежами.Затем перенаправьте их во внутреннее свойство пространства имен узла - например, drawing - для разделения этих данных.

Таким образом, все данные в соответствии с одним узлом могут храниться в одном месте.Нет необходимости копировать и преобразовывать его для разных библиотек и, возможно, позже изменить одни и те же свойства в разных местах.

0 голосов
/ 21 марта 2016

Я использовал Прокси-серверы ES6 вместе с Обещаниями ES6 в библиотеке для реализации отложенной загрузки: https://github.com/Daniel-Abrecht/Crazy-Loading

Прокси-серверы ES6 в настоящее время работают в Firefox 45 и Edge 13 и Chrome 49.

0 голосов
/ 04 марта 2014

Объект отказоустойчивого доступа, без eval, например:

someObj.someMethod.someFunction('param1');

//--> someObj doesn't exist (with fail safe, no error thrown)

0 голосов
/ 09 января 2014

Прежде всего, я хотел бы отметить, что в соответствии с этим: http://wiki.ecmascript.org/doku.php?id=harmony:direct_proxies прямые прокси - это последняя спецификация прокси-серверов ES и ее теперь часть проекта, что означает, что это будет ES6стандартно, как только он будет запущен, а также новейший движок gecko: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy с использованием уже прямых прокси.

Я написал небольшой код, используя новые прокси, чтобы сделать дочерние узлы внутри DOM доступнымикак свойства их родительского узла и multi-get, multi-set и функции multi-call их, аналогично селекторам запросов.Это невозможно сделать динамически без прокси-серверов, а использование прокси-серверов делает весь этот код менее одного КБ.

Вообще говоря, прокси-серверы делают прототипирование и метапрограммирование динамическими и простыми.

0 голосов
/ 27 января 2012

Большая часть «функциональности» прокси уже может быть реализована в текущем Javascript. Например, методы получения и установки могут быть сделаны как явные методы "setXXX" или "getXXX".

Самые большие преимущества прокси, которые я могу себе представить, это

  1. Принятие существующего поведения, которое в настоящее время находится в злых объектах браузера и позволяет реализовать его с использованием чистого Javascript. (Отлично подходит для разработчиков браузеров и для людей, пишущих прокладки)

  2. Дайте вам больше свободы изменять реализацию, не нарушая интерфейс (например, если свойство удаляется из объекта, вы можете поместить на его место магический метод получения, чтобы избежать взлома старого кода).

Тем не менее, мне все еще интересно, какие еще приятные вещи возможны в этой новой функции:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...