问题标签 [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 - 用于 IE11 的 ES6 代理 Polyfill
IE11 不会也不会实现 ES2015 代理对象。然而 IE11 的扩展支持结束日期是 2025 年 10 月 14 日。
有没有办法为 IE11 填充代理对象?所有其他浏览器都已经支持代理。
如果是,那么我们今天都可以在生产中使用它。如果没有,那么我们将不得不等待近十年......
编辑:我专门要求 IE11,因为我知道 IE 通常具有我通常不知道的 IE 特定功能。
Edit2:我对能够实现一个包罗万象的拦截器特别感兴趣。类似于__getattr__
在 Python 中。它只需要在 IE11 中工作。
javascript - Promise 作为类方法调用触发 object.then 解析
我有一个包含 db 方法的类,它包含在处理对属性的访问的代理中。由于问题与承诺有关,因此这里是一个简化的示例代码,它重现了相同的问题:
一切正常,在测试期间,我向代理添加了打印输出以确定使用这种模型设计的性能影响,并且我注意到我的模型是从承诺链中调用的。
示例输出如下:
我猜想返回new this(query)
会导致承诺认为它可能是返回的承诺并因此.then()
被执行。我发现的唯一解决方法是将解析响应包装在新数组或另一个像这样的对象中:
我想知道的是,这是正确的方法吗?对于这种副作用还有其他解决方案吗?
javascript - 是否可以从其自己的处理程序对象中引用代理?
我需要Proxy
从它自己的处理程序中引用当前实例。我没有在我读过的任何文档中看到这一点,我只是好奇是否有任何自然的方法可以做到这一点。
事情是,在handler对象里面,this
自然是指handler,而不是它Proxy
的handler 。
例如:
javascript - sessionStorage 代理类范围
我想知道如何从我的自定义方法中访问本机 sessionStorage 范围。
我的例子:
https://jsfiddle.net/3mc7ao7j/1/
在第 3 行,我希望能够sessionStorage
在对数据执行突变后代理到我的本地。
我如何再次访问该范围?我知道我可以打电话:
sessionStorage.setItem()
但这很有效,因为它是全球可用的,这样做感觉不对。主要是因为我还想知道如何在没有全局可用的对象的情况下执行此操作,因此我可以学习如何代理其他对象。
javascript - 使用 ES6 代理对象从目标对象检索属性时的符号与字符串
使用以下代码:
我使用此代码得到的错误是:
TypeError:无法将符号值转换为字符串
这发生在线上:
我以前使用过代理,我从未见过将符号传递给代理的 get 方法。有谁知道如何规避这个问题?
为什么将符号传递给代理获取函数,我该如何正确处理?
javascript - 奇怪的幽灵属性被发送到代理获取方法
这是导致错误的代码:
我正在处理的错误是,
或者
取决于我使用的检查,这在下面的代码中进行了演示。很明显,“inspect”属性被发送到 get 方法,但“inspect”不是符号,并且“inspect”也无法读取prop in chaiAssert
。
objectWithProxyProperty 看起来像:
似乎正在发生的事情是,当我使用名为“assert”的代理属性记录此对象时,代理本身会接收到 get 方法的奇怪属性。
具体来说,这些属性称为“检查”和“构造函数”,它们似乎不是符号。
所以我必须“解决问题”是添加一个这样的检查:
这些在 chaiAssert 上不存在但不是符号的属性是什么?
到目前为止,这些幽灵属性一直是“检查”和“构造函数”,但我之所以提出这个问题,是因为我需要找出可能还有哪些其他属性,以便我可以提前处理它们!
javascript - Javascript ES6 代理
我需要创建一个存储另一个对象的对象。大对象的每个属性都有两个属性“值”和“回调”。
我希望能够通过使用 bigObj.first / bigObj.first = "false" 和回调来获取和更改 value 属性。通过经典方法:bigObj.first.callback = () => {}。
每次更改属性“值”时,我都想调用它的回调函数。
这就是我所做的
问题是我无法更改回调属性。
您对我如何更改代码以使其正常工作有任何想法吗?
谢谢你。
javascript - 如何 ES6 代理 ArrayBuffer 或 Uint8Array?
这些工作:
这些不会:
错误:
Failed to execute 'digest' on 'SubtleCrypto': The provided value is not of type '(ArrayBuffer or ArrayBufferView)'
instanceof Uint8Array
并instanceof ArrayBuffer
在两种情况下都返回 true。
javascript - 替代代理例外
当Proxy
捕获一个分配并且不确认它时,在严格模式的情况下TypeError
被抛出。但我会滥用代理并需要一个ReferenceError
。
我怎样才能ReferenceError
接听第二个电话?
PS:同样的问题在俄语中。
javascript - 在 proto 代理之上分配一个属性
get
以下代码包含对象中带有陷阱的代理__proto__
。从对象中获取某个属性时,根据js逻辑,只有当对象本身不包含相应属性时才会调用trap。因此,在分配后,属性出现在对象中并且不会调用 get 陷阱。它完全按照我的意愿工作。
现在我要添加一个set
陷阱:
问题是我不能将属性直接写入对象。该属性要么写入被代理包装的对象而不是包装代理的对象,要么发生无限递归set
陷阱。
所以我想获得与第一个片段相同的输出,但使用 new line Assigning a property: a
。
PS:俄语中的相同问题。