Вопрос по node.js – Включить Harmony Proxies в nodejs

20

Можно ли включить EcmaScript 6 Harmony Proxies в nodejs? Если так, каковы плюсы и минусы? И есть ли документация о том, как их использовать? Спасибо !

Ваш Ответ

5   ответов
1

Proxy теперь доступно изначально в версиях Node & gt; = 6.

Я сделал в то время, попробуйте журнал изменений на сайте NodeJS, почти уверен, что он был там
У вас есть источник для этого?
-11

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

Посмотрите этот репозиторий GitHub для примеров: https://github.com/mschwartz/SilkJS-Harmony

SilkJS Fan, я не думаю, что вызов функции evert должен быть асинхронным & # x2014; просто не делай IO внутри и все.
прокси и (а) синхронность являются такими же ортогональными понятиями, как, скажем, бутерброды с сыром и праздничные дни.
Как насчет обещаний?
Код гармонии выглядит так:foo = proxy_thing.some_member;  some_member - это вызов функции. Я не знаю, как это может быть асинхронно.
Я не совсем понимаю, что вы говорите. Конечно,get trap-сообщение может возвращать асинхронную функцию как «метод»?
1

который представляет собой упрощенную реализацию прокси, что упрощает декларирование и совместимо с ES5. В отличие от собственного прокси, он может использовать только свойства прокси, известные во время создания.

https://github.com/Boulangerie/pimped-proxy

2

гармония, отражаютчто облегчает, например, настроить ловушки / установить ловушки:

UPDATE осторожно, ниже 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 действия над объектом прерываются & # x2014; в этой демонстрации мы устанавливаем%is-clean атрибута, чтобы мы могли проверить, были ли изменены элементы объекта, а также мы удалили элементы, для которых было установлено значение undefined.

ты прав ...
правильный. вопрос был на NodeJS, а не на JavaScript. CoffeeScript компилируется в JavaScript; Вы можете скопировать и вставить приведенный выше код в js2coffee.org (вторая вкладка), если вы предпочитаете JS над CS.
Я не понимаю, почему за это проголосовали ... Я только сейчас работаю над нон-кл-кофискриптом, используя гармонию или ее части ... это именно то, что мне нужно. Спасибо
ну, было бы неплохо иметь здесь код ecmascript-harmony, так как вопрос помечен как таковой.
это не JavaScript
20

node --harmony-proxies должен сделать свое дело.

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

Минусы: прокси-серверы - это слишком мощная функция, когда они вам не нужны (что должно происходить в большинстве случаев). Также реализация все же должна рассматриваться как экспериментальная.

Что касается документации, то все, что есть на самом деле, - это вики Harmony, в частности эта страница, которая отражает текущую реализацию прокси в V8 (и, следовательно, в узле):

http://wiki.ecmascript.org/doku.php?id=harmony:proxies

UPDATE 2015/10/12: На данный момент V8 еще не поддерживает ES6new Proxy() обработчик, вам придется использоватьProxy.create() вместо или вы можете использоватьthis shim псевдоним вызова функции для вас
Что является "слишком сильным"? о такой функции?
Это действительно было необходимо, однако я все еще не мог заставить его работать. Следующая ветка и пример также были очень полезны:github.com/joyent/node/issues/4138

Похожие вопросы