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