问题标签 [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.
javascript - ES6 代理设置属性陷阱未触发数组长度
使用 JavaScript ES6 代理时,array.length 的 set 属性陷阱在直接分配数组索引时不会触发。
例如:
Chrome 51 和 Firefox 47 输出:
虽然我期望:
这是每个规格吗?我找不到这方面的任何信息。
javascript - 函数代理 .toString() 错误
我正在尝试在函数代理上调用 .toString() 。
简单地创建一个函数代理并调用 toString 会导致“TypeError:Function.prototype.toString is not generic”,设置 toString 以返回原始导致“RangeError:超出最大调用堆栈大小”的源,但是为 toString 创建了一个 get 陷阱作品。
为什么简单地设置 toString 函数不起作用,但做一个 get 陷阱呢?
javascript - 如何从代理对象获取代理的处理程序?
例如,如果我有这个处理程序/代理(来自MDN 示例)......
是否有可能以p
某种方式探测代理,让我取回handler
对象。
类似于以下内容:
显然,处理程序中设置的各种陷阱对于代理来说仍然是“已知的”,但是有没有一种明确的方法可以从代理本身返回它们/处理程序?如果是这样,怎么做?
目前我没有具体的用例,但是如果您想在已经拥有代理后动态更改处理程序/陷阱,我可以看到这很有用。
javascript - 无法将代理对象添加到 DOM(陷阱也不会触发)
我正在尝试创建一个Proxy
对象来Image
捕获属性,但即使使用空处理程序,我也会收到一条错误消息。
TypeError:Node.appendChild 的参数 1 没有实现接口 Node。
代理对象应该充当目标对象,所以这让我有点困惑。据我了解,您也应该能够使用DOM 节点执行此操作(?)。
另外:我无法开始加载图像并在设置属性onload
时触发处理程序。src
我应该如何使用代理,以便我可以“接管”例如“src”属性,否则让它像普通图像对象一样工作?
我的代码
更新:感谢@Harangue!使用 " 现在我无法捕获属性的设置。它似乎完全忽略了陷阱-例如:new
" (bah..) 确实使代理对象变得栩栩如生,但是
如何使用有效代理捕获属性设置?
更新 2另一方面 -new
与新代理一起使用似乎只使用原始构造函数。我能找到的所有例子都没有使用新的:
在此之上使用 thennew myProxy()
似乎只使用原始构造函数,这不是我想要的,因为它忽略了陷阱。
陷阱似乎在我的第一次尝试中起作用,但代理的行为不如预期。这太令人困惑了,太新奇了。对如何解决这两个问题(陷阱和行为)的任何输入感到高兴。
javascript - 在代理获取处理程序中区分直接访问和内部访问
我有一个数组:
我使用处理程序为该数组创建了一个代理,该处理程序将为每个 numberget
返回带有索引的属性。例如,将返回、–和– 。n - 1
n
p[1]
'a'
p[2]
'b'
p[3]
'c'
它似乎工作正常。p[2]
,例如,给出'b'
应该的。但是,还有另一个问题。Array.prototype.indexOf()
不再正常工作。当我通过'a'
或时它确实有效'b'
- 它分别返回1
and 2
,但'c'
它返回-1
。事实证明,这indexOf()
也触发了get
处理程序。通过添加console.log(property)
到get
处理程序,我们得到以下输出p.indexOf('c')
:
似乎indexOf()
内部检查了length
属性,然后将数组从 index 迭代0
到length - 1
.
如果我知道该属性是直接访问(如p[2]
)还是内部访问,那么解决这个问题将是微不足道的。然后我总是可以返回target[property]
内部访问(所以代理将是无操作的)。
如何区分代理get
处理程序中的直接访问和内部访问?
我唯一想到的就是抛出一个错误,捕获它并分析它的堆栈。尽管如此,这似乎是一种解决方法,而不是实际的解决方案,所以我想避免它,除非没有其他办法。
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
javascript - 在 node.js ES6 中,是否可以传入一个类型然后实例化它?
在我的项目中,我有几个如下所示的类:
是否可以为参数传递一个类型,以便我只需要一个 DAOIntercepter 类,而不是每个数据访问对象一个?
通过传递文件名,我可以看到我为此工作的部分require()
,SystemsDAO
但至于该类的实例化,我真的看不出如何做到这一点。
javascript - 检查代理对象是否被撤销
ECMAScript 6 引入了代理对象,它可以被创建为可撤销的。
如何检测代理是否已被撤销?
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()
返回它?