问题标签 [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 投票
2 回答
1223 浏览

javascript - 使用 ES6 代理隐藏私有属性

我正在尝试创建一个尽可能隐藏对象私有属性的函数。我在这里将私有属性定义为以下划线开头的属性,例如。_password.

以下是我到目前为止所得到的(感谢Nicolas Bevacqua 对代理的精彩介绍)。

现在我想知道:

  1. 我是否使用以下代码涵盖了所有基础?还是我错过了一个重要的代理陷阱,仍然可以通过它访问对象?
  2. 这是将这些Reflect方法与代理结合使用的正确方法吗?我在这里甚至需要它们吗?
  3. 我为私有财产返回的值是否真实到足以让人们认为该财产真的不存在?

到目前为止我的功能:

PS:对于原生浏览器支持,您可能需要在 MS Edge 或 Firefox Dev Edition 中查看。

http://jsfiddle.net/bkd7mde7/1/

0 投票
1 回答
805 浏览

javascript - JS 代理 HTML5 画布上下文

我希望代理画布 API,以便我可以测试抽象方法确实绘制到画布上,但是我遇到了代理后出现错误的问题:

'strokeStyle' setter called on an object that does not implement interface CanvasRenderingContext2D

此代码已简化,但会引发相同的错误:

有什么想法吗?

0 投票
1 回答
93 浏览

javascript - Chrome 上奇怪的 ES6 代理行为

我正在运行这段简单的代码:

在 Firefox [nightly 46] 上,我得到了预期的输出:

但是,在 Google Chrome [canary 49] 上,会记录一些奇怪的事情:

知道这里发生了什么吗?

0 投票
1 回答
54 浏览

javascript - 代理获取 RangeError

我正在尝试使用代理拦截获取和设置操作。设置完美,但在无限循环中触发“RangeError:超出最大调用堆栈大小”。我试图在拦截期间简单地记录并返回默认行为。

在职的:

破碎的:

0 投票
1 回答
478 浏览

javascript - 身份保护膜代理的用例是什么?

当我阅读有关 ES6 代理的内容时,它似乎很容易理解,直到我查看了这个示例

我难住了。我不明白他们使用的“湿/干”术语,而且我不知道什么时候会出现这种情况,这将是理想的选择,尤其是因为我似乎找不到一个。

有人可以简要解释一下会发生这种情况的情况吗?

0 投票
1 回答
97 浏览

javascript - 将代理与普通数组一起使用

考虑这段代码:

每当我app.mediaLibrary.media.push(new app.mediaLibrary.Media("", "")) 在控制台中调用时,我都会看到:

我明白为什么我会看到这个,但我该如何围绕它进行编码?看来我的陷阱是由内部(pushlength)以及外部调用([0]=...)触发的,我不知道如何区分它们。有任何想法吗?

0 投票
3 回答
2389 浏览

javascript - JavaScript 代理的替代方案

我想Proxy在一个名为的自定义类上使用,ObservableList其中包含一个Array. 由于Proxy仅在 ES6 之后可用,我想知道是否有任何替代实现。

我的要求是一旦发生变化就让观察者得到更新(而不是被注意到)ObservableList,这样观察者总是与带有某种过滤或映射方法的可观察者保持一致。

我的代理实现可在https://jsfiddle.net/ovilia/tLmbptr0/3/

0 投票
2 回答
794 浏览

javascript - 嵌套的 ES6 代理无法按预期工作

我正在开发一个 API 客户端,它允许在提供 a 的 ID 时调用特定的 API 方法foo,如下所示:

为方便开发人员,我正在尝试实现自定义代理对象:

经过一段时间的搜索,我认为 ES6 代理可能最适合这种情况,因为fooId需要将其作为方法调用的第一个参数插入以支持两种工作方式。
因此,我创建了以下代码。如果调用了 的对象属性Foo.myFoos(例如Foo.myFoos.example),则在 中搜索_myFooItems它,如果存在,则返回另一个 Proxy 对象。
现在,如果在对象上调用了一个方法,则会在 的属性中搜索该方法Foo,如果找到,则将该Foo方法myFooId作为其第一个参数调用。
这意味着,您应该能够Foo.myFoos.example.parentMethodX('bar', 'baz').

虽然如果您运行代码并尝试注册 a 会发生什么foo(上面的代码在 Node>=6.2.0 中工作),但会引发以下错误:

在花了很多时间思考为什么第二个代理甚至尝试调用一个方法(如果没有给它)之后,我最终放弃了。我希望exampleFoo成为一个代理对象,Foo如果被调用则接受方法。
是什么导致了这里的实际行为?

0 投票
6 回答
13961 浏览

javascript - 我可以使用 ES2015 类扩展代理吗?

我尝试扩展代理,如下所示:

我使用 Babel 将其转译为 ES5,但在浏览器中出现此错误:

我查看了它指向的代码行。这是代码的那部分,箭头指向有问题的代码行:

有谁知道我为什么会收到这个错误?这是 Babel 中的错误吗?当您尝试扩展代理时应该发生什么?

0 投票
1 回答
162 浏览

javascript - ES6:和谐代理:为什么 `tracedObj.squared(9)` 返回未定义?

为什么tracedObj.squared(9)返回未定义?

这可能与在它自己的对象上调用方法后调用的范围obj错误有关。thissquared

代码

输出

我正在使用节点 v4.4.3(使用这些是否为时过早?)

运行代码

我必须像这样运行命令:

node --harmony-proxies --harmony ./AOPTest.js