我有这样的代理:
var pr = new Proxy([],...);
在不提供所有详细信息的情况下,将其设置为捕获整数并从相应索引处的另一个(实际)数组“ B”返回对象。因此,例如pr [3]将返回B [3] .someProperty。它还捕获“长度”并返回数组“ B”的长度。但是,实际上从未将值直接直接分配给pr“数组”。因此,您看到它有点像“伪”数组。它仅反映数组“ B”,不包含任何实际值。
问题在运行测试(pr中的someinteger)时出现。当然,根据我的描述,该测试将始终返回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]);