问题标签 [es6-proxy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
23 浏览

node.js - 超出 StackSize - 尝试创建 API

我正在尝试在 NodeJs 之上使用 TypeScript 和 ES6 代理创建一个动态 API。我实现了 API,但经过一些测试后,我发现我超出了堆栈大小。即使我尝试将 --stack-size 设置为 16000 但它仍然超过它!我想我有一些我没有看到的递归方法。

这是我的代码:

我正在使用 TypeScript 2.4.2 和 Node 8.7.0(也在较低的 8.x 版本上尝试过)。在我的配置中,我将目标设置为 es6。我不明白我的问题是!

PS:测试:

0 投票
0 回答
400 浏览

javascript - ES6 代理调用方法作为属性

我有以下类使用代理来获取属性和方法:

在代理的 get 方法中,检索属性是微不足道的。我只是检查它们在 中是否存在_attributes,然后返回值,否则返回 null。

然后我可以将其用作:

在代理的 get 方法中,我还可以检查调用的属性是否为函数,并返回相应的函数作为结果:

然后我可以将其用作:

但是,在代理的 get 函数中,我无法区分user.client()user.client。在第一种情况下,我想返回函数的结果。在第二种情况下,我想检索函数的结果,执行一个额外的步骤,然后返回它。

在伪代码中:

使用代理,我可以区分get 方法之间user.client()的区别吗?user.client

在 PHP 中,这可以使用魔术方法__getvs __call,但我正在寻找一种在 Javascript 中执行此操作的方法。

0 投票
3 回答
4065 浏览

javascript - 从现有代理实例中检索原始目标对象

假设我有一个像这样的代理实例:

稍后,我想从代理中检索目标,有什么办法吗?就像是:

0 投票
1 回答
507 浏览

javascript - 在 JavaScript 中继承类(函数)的代理时发生了什么

我想继承一个带有代理构造函数的函数,比如下面的 SubB;

但是,它不能集体工作;子类方法似乎未绑定在 SubB 中。

SubB 类发生了什么,我该如何解决(或者可能)?

0 投票
1 回答
560 浏览

javascript - ES6 代理中的意外设置陷阱行为

我正在尝试拦截对 Map 对象的 set 和 get 操作。我绝不会尝试扩展/子类化地图。在代理所述 Map 对象的过程中,我遇到了这种奇怪的意外行为,在上面的代码中没有触发 set 陷阱,而是触发了两次 get 陷阱!

我进一步通过以下方式从 get 陷阱中记录 k(key) 值;

我期望的行为是数组在 get 陷阱[2,1]console.log(k)实际输出键的值。

我想知道为什么会发生这种情况,我在这里遇到了一些与代理地图相关的问题,但没有一个能导致任何关于为什么会发生这种情况的合理推理。

我的最终目标是在设置的陷阱处触发一个事件。我是否将代理用于它应该使用的东西?如果不是,我应该采取什么方法?我是否应该放弃使用 Map 到 Object Literal,即使它会带来使用 Map 的所有缺点?例如:没有长度属性、仅字符串属性、没有强制唯一键等。

更新:我对这个代理地图的深入研究越多,我遇到的问题就越多。现在在我看来,ES6 代理 API 对待 Maps 的方式就像对待普通对象一样。维尔的回答和我的挖掘支持了这一点。我为什么这么说?阅读以下;

上面的代码理论上应该不会成功吧?就好像 Proxy 在拦截 Maps 的时候也是用同样的逻辑来拦截对象操作一样!作为;

Vill 的回答说代理标识Map.prototype.set为第一个读取,然后将其作为函数调用。这是否意味着在我在原始代码中编写的设置陷阱中(在最顶部)不会拦截 Map 的修改/设置属性,实际上Map.prototype.set使用 Map- 的隐式/原生而不是Reflect.set我们通过代理授予的?

这一切难道不是进一步强化了代理和地图不能很好地混合在一起的事实吗?我是不是走错路了?如果是这样,我有什么误解?代理是否应该像对待任何其他对象一样对待地图?

0 投票
1 回答
808 浏览

javascript - 代理未检测到嵌套数组的更改

模块代码:

示例脚本:

我希望set处理程序在对象更新时触发,但是当推送到对象内部的数组时,它不会发生。为什么不开火?

我正在使用节点 v8.1.4。据说所有代理问题都在 v6 之后得到修复。

0 投票
1 回答
217 浏览

javascript - 代理无法获取扩展类中的方法

我正在尝试使用 a Proxy,但我遇到了问题。我有这样的课:

然后我像这样扩展Model

然后我调用getItems()它创建类的一个实例。

当我运行它时,我收到错误:

TypeError: t.doSomething 不是函数

doSomething()班内在哪里ModelBase。如果我注释掉Proxy一切照常工作。所以,我想知道为什么我不能访问父类。

0 投票
1 回答
36 浏览

javascript - ES6 代理记录一个无法解释的额外值

到目前为止,我已经将 ES6 代理理解为一种添加拦截的方式,以允许您向代码添加自定义行为。实现了此代码片段以拦截对数组的推送,但它记录了额外的“被困!1'后推,我不知道为什么。有谁知道它为什么这样做?这是否意味着陷阱中的代码运行了两次?

0 投票
1 回答
928 浏览

javascript - 为什么'await'会在'async'函数返回的代理上触发'.then()'?

我正在用 babel (env) 编译代码,编译到 ES5。

这是代码:

0 投票
1 回答
60 浏览

javascript - 了解 ES6 javascript 代理

我正在尝试使用以下代码通过代理注册功能更改:

当我输入

我得到输出

但是如果我输入

处理程序“get”什么都不输出

我如何让代码为“wa = 10”工作?这是codewars.com挑战的一部分,所以

是预定义的,我无法修改它。

PS:请不要剧透如何完成这个挑战,我只想知道如何完成这部分。或者建议另一种方法来完成这项工作。

谢谢!