gpt4 book ai didi

Javascript:在代理中捕获 "in"运算符

转载 作者:行者123 更新时间:2023-12-03 07:48:45 24 4
gpt4 key购买 nike

我有一个像这样的代理:

var pr = new Proxy([],...);

在不提供所有血腥细节的情况下,它被设置为捕获整数并从相应索引处的另一个(实际)数组“B”返回对象。因此,例如 pr[3] 将返回 B[3].someProperty。它还捕获“length”并返回数组“B”的长度。然而,值实际上从未直接分配给 pr“数组”。所以你会看到它是一种“伪”数组。它只是反射(reflect)数组“B”,并且不包含实际值。

运行测试(pr 中的某个整数)时会出现问题。当然,根据我的描述,这个测试总是返回 false。该测试似乎没有在代理中运行代码,因此我似乎无法捕获它并计算它的返回值。或者我可以吗?

这会给 Array.prototype 迭代器方法带来问题,因为其中许多方法都会执行该测试。我可以在代理中编写自己的相应方法作为陷阱,但我想找到一种更简单的方法。如果有一种方法来处理“in”运算符,那将节省大量额外的代码。

有什么我没有看到的东西,或者有办法解决这个问题吗?

最佳答案

代理有一个in的陷阱,它被称为has:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/has

var a = "abcd".split("");
var pr = new Proxy(a, {
has: function(target, prop) {
return (prop === "length" || +prop === (prop >>> 0) && +prop < target.length);
},

get: function(target, prop) {
if(prop === "length") return target.length;

if(+prop === (prop >>> 0) && +prop < target.length)
return target[prop];
return void 0;
}
});

console.log(2 in pr, pr[2]);
console.log(5 in pr, pr[5]);

关于Javascript:在代理中捕获 "in"运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35093382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com