ES6代理包装器

时间:2017-08-03 08:33:32

标签: node.js reflection ecmascript-6

来自6个版本的现代ECMAScript-262支持Proxy对象,它允许拦截自定义对象调用(https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Proxy

通过使用Proxy-object,用户可以编写类似obj.func1(123).func2('ABC').something的内容,obj实际上不存在任何权利。当然,通过适当的代理声明,这个链可以存在。最简单的方法是在每个属性访问和函数调用上返回新的代理。

但有没有办法自动化这个过程,也许是一些NPM库?目标是使用Proxy将自定义自由格式表达式转换为声明性字符串。 上面的示例将转换为:

const result = obj.func1(123).func2('ABC').something;
result.__INVOCATION_VIEW__ === [
  { type: 'function', name: 'func1', args: [123] },
  { type: 'function', name: 'func2', args: ['ABC'] },
  { type: 'get', name: 'something' }
]

纯理论上,解决方案无论如何都是可能的,因为调用链中的任何实体在后续代理中都可以作为字符串使用。但实施起来非常复杂。也许有现有的图书馆?

0 个答案:

没有答案