我有一个像这样的代理:
var pr = new Proxy([],...);
在没有提供所有血腥细节的情况下,它被设置为捕获整数并从另一个(实际)数组返回对象" B"在相应的指数。因此,例如,pr [3]将返回B [3] .someProperty。它也陷阱"长度"并返回数组" B"的长度。但是,值实际上永远不会直接分配给pr"数组"。所以你看它有点像#34;伪"阵列。它只是反映数组" B",并且不包含实际值。
当运行测试(pr中的someinteger)时会出现问题。当然,根据我的描述,这个测试总是会返回false。这个测试似乎没有在代理中运行代码,所以我似乎无法捕获它并计算它的回报。或者我可以吗?
这会产生Array.prototype迭代器方法的问题,因为它们中的许多都执行该测试。我可以在代理中编写自己的相应方法作为陷阱,但我想找到一种更简单的方法。如果有办法处理" in"运算符,可以节省大量额外的代码。
有什么东西我没有看到,或者是解决这个问题的方法吗?
答案 0 :(得分:1)
代理有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]);