Javascript:Trap" in"代理人

时间:2016-01-29 20:23:15

标签: javascript arrays proxy

我有一个像这样的代理:

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

在没有提供所有血腥细节的情况下,它被设置为捕获整数并从另一个(实际)数组返回对象" B"在相应的指数。因此,例如,pr [3]将返回B [3] .someProperty。它也陷阱"长度"并返回数组" B"的长度。但是,值实际上永远不会直接分配给pr"数组"。所以你看它有点像#34;伪"阵列。它只是反映数组" B",并且不包含实际值。

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

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

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

1 个答案:

答案 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]);
相关问题