问题标签 [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 回答
1914 浏览

javascript - ES6 代理设置属性陷阱未触发数组长度

使用 JavaScript ES6 代理时,array.length 的 set 属性陷阱在直接分配数组索引时不会触发。

例如:

Chrome 51 和 Firefox 47 输出:

虽然我期望:

这是每个规格吗?我找不到这方面的任何信息。

0 投票
2 回答
2714 浏览

javascript - 函数代理 .toString() 错误

我正在尝试在函数代理上调用 .toString() 。

简单地创建一个函数代理并调用 toString 会导致“TypeError:Function.prototype.toString is not generic”,设置 toString 以返回原始导致“RangeError:超出最大调用堆栈大小”的源,但是为 toString 创建了一个 get 陷阱作品。

为什么简单地设置 toString 函数不起作用,但做一个 get 陷阱呢?

0 投票
3 回答
6900 浏览

javascript - 如何从代理对象获取代理的处理程序?

例如,如果我有这个处理程序/代理(来自MDN 示例)......

是否有可能以p某种方式探测代理,让我取回handler对象。

类似于以下内容:

显然,处理程序中设置的各种陷阱对于代理来说仍然是“已知的”,但是有没有一种明确的方法可以从代理本身返回它们/处理程序?如果是这样,怎么做?

目前我没有具体的用例,但是如果您想在已经拥有代理后动态更改处理程序/陷阱,我可以看到这很有用。

0 投票
2 回答
1634 浏览

javascript - 无法将代理对象添加到 DOM(陷阱也不会触发)

我正在尝试创建一个Proxy对象Image捕获属性,但即使使用空处理程序,我也会收到一条错误消息。

TypeError:Node.appendChild 的参数 1 没有实现接口 Node。

代理对象应该充当目标对象,所以这让我有点困惑。据我了解,您也应该能够使用DOM 节点执行此操作(?)。

另外:我无法开始加载图像并在设置属性onload时触发处理程序。src

我应该如何使用代理,以便我可以“接管”例如“src”属性,否则让它像普通图像对象一样工作?

我的代码

更新:感谢@Harangue!使用 " new" (bah..) 确实使代理对象变得栩栩如生,但是现在我无法捕获属性的设置。它似乎完全忽略了陷阱-例如:

如何使用有效代理捕获属性设置?

更新 2另一方面 -new代理一起使用似乎只使用原始构造函数。我能找到的所有例子都没有使用新的:

在此之上使用 thennew myProxy()似乎只使用原始构造函数,这不是我想要的,因为它忽略了陷阱。

陷阱似乎在我的第一次尝试中起作用,但代理的行为不如预期。这太令人困惑了,太新奇了。对如何解决这两个问题(陷阱和行为)的任何输入感到高兴。

0 投票
2 回答
97 浏览

javascript - 在代理获取处理程序中区分直接访问和内部访问

我有一个数组:

我使用处理程序为该数组创建了一个代理,该处理程序将为每个 numberget返回带有索引的属性。例如,将返回、–和– 。n - 1np[1]'a'p[2]'b'p[3]'c'

它似乎工作正常。p[2],例如,给出'b'应该的。但是,还有另一个问题。Array.prototype.indexOf()不再正常工作。当我通过'a'或时它确实有效'b'- 它分别返回1and 2,但'c'它返回-1。事实证明,这indexOf()也触发了get处理程序。通过添加console.log(property)get处理程序,我们得到以下输出p.indexOf('c')

似乎indexOf()内部检查了length属性,然后将数组从 index 迭代0length - 1.

如果我知道该属性是直接访问(如p[2])还是内部访问,那么解决这个问题将是微不足道的。然后我总是可以返回target[property]内部访问(所以代理将是无操作的)。

如何区分代理get处理程序中的直接访问和内部访问?

我唯一想到的就是抛出一个错误,捕获它并分析它的堆栈。尽管如此,这似乎是一种解决方法,而不是实际的解决方案,所以我想避免它,除非没有其他办法。

0 投票
1 回答
43 浏览

ecmascript-6 - 使用 ES6 Proxy 前后实现 Do

我有一个 View 和 Utility 类,并希望在 View 的工作完成后加入 Utility 方法。所以想要在 View 的渲染调用完成后调用实用程序方法(向视图添加行为)。

使用 ES6 代理 API,有没有办法在执行方法之前/之后执行main方法?(又名方法拦截)

类似于 YUI3 Do API。 http://yuilibrary.com/yui/docs/api/classes/Do.html

0 投票
1 回答
153 浏览

javascript - 在 node.js ES6 中,是否可以传入一个类型然后实例化它?

在我的项目中,我有几个如下所示的类:

是否可以为参数传递一个类型,以便我只需要一个 DAOIntercepter 类,而不是每个数据访问对象一个?

通过传递文件名,我可以看到我为此工作的部分require()SystemsDAO但至于该类的实例化,我真的看不出如何做到这一点。

0 投票
1 回答
3607 浏览

javascript - 代理构造函数和反射有什么区别?

ReflectProxy之间有什么显着区别吗?

从记录的内容来看,它们似乎具有几乎相同的功能,除了:

  • 反映当时只能指定一个陷阱。
  • 代理是可撤销的。
  • 代理是一个构造函数。

如果上面的列表总结了所有差异,那么两者兼有的理由是什么?

0 投票
1 回答
1641 浏览

javascript - 检查代理对象是否被撤销

ECMAScript 6 引入了代理对象,它可以被创建为可撤销的。

如何检测代理是否已被撤销?

0 投票
3 回答
1109 浏览

javascript - JavaScript中的自定义类数组getter

我有一个简单的 ES6 类,如下所示:

我想让它使 Ring 对象的索引换行,以便new Ring(1, 2, 3)[3]返回 1,new Ring(1, 2, 3)[-1]返回 3,依此类推。这在 ES6 中可能吗?如果是这样,我将如何实施它?

我读过代理,它允许完全自定义的getter,但我不知道如何将代理应用于类。我确实做到了:

myRing现在是一个支持包装索引的 Ring 对象。问题是我每次都必须像这样定义 Ring 对象。有没有办法将此代理应用于类,以便调用new Ring()返回它?