Можно ли включить прокси EcmaScript 6 Harmony в nodejs? Если да, то каковы плюсы и минусы? И есть ли документация по их использованию? Спасибо !
Включить прокси Harmony в nodejs
Ответы (5)
Вызов узла с node --harmony-proxies
должен помочь.
Плюсы: прокси - очень мощная функция, когда они вам действительно нужны.
Минусы: прокси - это слишком мощная функция, когда они вам не нужны (что должно быть в большинстве случаев). Также реализацию все же следует считать экспериментальной.
Что касается документации, все, что на самом деле есть atm, - это вики Harmony, в частности эта страница, которая отражает текущую реализацию прокси в V8 (и, следовательно, node):
http://wiki.ecmascript.org/doku.php?id=harmony:proxies
new Proxy()
ES6, вам придется использовать Proxy.create()
вместо этого или вы можете использовать эту прокладку для псевдонима вызова функции для вас.
- person Blake Regalia; 13.10.2015
я рекомендую отражение гармонии, что упрощает, например, настроить ловушки получения / установки:
ОБНОВЛЕНИЕ осторожно, ниже CoffeeScript
require 'harmony-reflect'
handler =
get: ( target, name ) ->
console.log 'get' name
return target[ name ]
set: ( target, name, value ) ->
console.log 'set' name
target[ '%is-clean' ] = no if value isnt target[ name ]
if value is undefined then delete target[ name ]
else target[ name ] = value
return value
clean = ( x ) ->
x[ '%is-clean' ] = yes
return x
p = Proxy {}, handler
p[ 'a' ] = 1
p[ 'b' ] = undefined
console.log p[ 'a' ], p[ 'b' ]
console.log "c" of p, p[ 'c' ]
console.log p
clean p
p[ 'a' ] = 1
console.log p
p[ 'a' ] = 42
console.log p
Выше приведен пример кода для «прозрачного сохранения объекта» в JavaScript. с помощью harmony-reflect
становится тривиальным сделать так, чтобы все действия get
и set
с объектом перехватывались - в этой демонстрации мы устанавливаем атрибут %is-clean
, чтобы мы могли проверить, были ли изменены элементы объекта, а также удаляем элементы, которые были установлено значение undefined.
Вы можете использовать pimped-proxy, который представляет собой легкую реализацию прокси, упрощающую декларацию и совместимость с ES5. В отличие от собственного прокси, он может использовать только те свойства, которые известны во время создания.
https://github.com/Boulangerie/pimped-proxy
Proxy
теперь доступен в версиях Node> = 6.
Прокси-серверы Harmony не будут работать так хорошо для nodejs, потому что они фактически являются вызовами функций синхронного типа. То есть вы не можете реализовать асинхронный прокси-метод.
Примеры см. В этом репозитории GitHub: https://github.com/mschwartz/SilkJS-Harmony
get
может возвращать асинхронную функцию как метод?
- person Andreas Rossberg; 09.11.2012
foo = proxy_thing.some_member;
some_member - это вызов функции. Я не знаю, как это могло быть асинхронно.
- person mschwartz; 21.02.2013