Я пытаюсь найти ESx (Harmony?) Proxies. Думаю, теперь я знаю основы, но я не думаю, что смогу их использовать.
Кто-нибудь мог использовать их для любой пользы? Я не знаю ни одной библиотеки или всего, что это делало.
Я пытаюсь найти ESx (Harmony?) Proxies. Думаю, теперь я знаю основы, но я не думаю, что смогу их использовать.
Кто-нибудь мог использовать их для любой пользы? Я не знаю ни одной библиотеки или всего, что это делало.
Для получения дополнительной информации о прокси-серверах ознакомьтесь с в этой статье помощником профессора Томом Ван Куцем. Вместе с Google Mark Miller Том действительно сыграл ключевую роль в предложении прокси для включения в будущий стандарт ECMAScript во время своей работы в es- лаборатория.
Кроме того, обратите внимание, что DirectProxies.js был заменен новым reflect.js shim.
Наконец, посмотрите пример проекта Sindre Sorhus отрицательный массив для примера простого примера использования.
Сегодня это прошло почти 5 лет с тех пор, как был задан этот вопрос. Хотя они стали частью стандарта ECMAScript 2015 (ака ES6) в 2015 году, многие браузеры все еще не реализовали их:
Если вы хотите знать, какие браузеры поддерживают прокси-серверы, когда вы читаете этот ответ, взгляните на CanIUse.
Прокси - довольно стратегическая функция, которая в первую очередь предназначена для реализации привязок или абстракций расширенной библиотеки. Не беспокойтесь, если вы не видите немедленного использования для своего собственного кода. На самом деле, если вы это сделали, вы должны подумать, по крайней мере, дважды, прежде чем использовать их - чаще всего это слишком много, и есть более простой и эффективный способ достичь того же.
На исходной странице предложения есть несколько примеров: http://wiki.ecmascript.org/doku.php?id=harmony:proxies
Вещи развивались немного! Firefox поддерживает Proxies изначально. Используя реализацию harmony-reflection.js, вы можете попробовать использовать прокси в соответствии с предлагаемой спецификацией Прямые прокси. Это работает с текущим Firefox или последним Chrome.
Возможный прецедент: у вас есть объект, представляющий node в графе, содержащем id
, type
и произвольных других пользовательских свойствах. Библиотека, нарисовавшая этот node на экране, хочет сохранить координаты экрана и аналогично непосредственно этому node. Это может привести к перезаписыванию существующих свойств.
Теперь вы можете передать прокси в библиотеку чертежей, которая получает доступ к конкретным свойствам чертежа node. Затем перенаправьте их на внутреннее свойство пространства имен node - например, drawing
- для разделения этих данных.
Таким образом, все данные в соответствии с одним node могут храниться в одном месте. Нет необходимости копировать и преобразовывать его для разных библиотек и, возможно, позже изменять одни и те же свойства в разных местах.
Большинство прокси-функциональных возможностей уже могут быть реализованы в текущем Javascript. Например, геттеры и сеттеры могут быть сделаны как явные методы "setXXX" или "getXXX".
Самые большие преимущества передних прокси, о которых я могу думать, - это
Взятие существующего поведения, которое в настоящее время находится в злых объектах браузера и позволяет реализовать его с помощью чистого Javascript. (Отлично подходит для разработчиков браузеров и для людей, которые пишут прокладки)
Дайте вам больше свободы для изменения реализации, не нарушая интерфейс (например, если свойство удалено из объекта, вы можете поставить волшебный геттер вместо него, чтобы не нарушать старый код).
Тем не менее, мне все еще интересно, какие другие приятные вещи возможны в этой новой функции:)
Прежде всего, я хотел бы отметить, что в соответствии с этим: 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 доступными как свойства их родительского node и multi-get, multi-set и функции для их множественного вызова, аналогично селекторам запросов, Это невозможно сделать динамически без прокси-серверов, и использование прокси-серверов делает весь этот код менее одного КБ.
В целом говорящие прокси делают прототипирование и метапрограммирование динамичным и легким.
Безопасный доступ к объектам без eval, например:
someObj.someMethod.someFunction('param1');
//--> someObj doesn't exist (with fail safe, no error thrown)
Я использовал ES6 Proxies вместе с ES6 Promises в библиотеке для реализации Lazy Loading: https://github.com/Daniel-Abrecht/Crazy-Loading
ES6 Proxies в настоящее время работают в Firefox 45 и Edge 13 и Chrome 49.