const arr = [1,2,3,4,5]
function proxy(arr) {
return new Proxy(arr, {
get(target, prop, receiver) {
if (prop < 0) {
console.log('len', Number(prop) + target.length)
prop = +prop + target.length;
}
// 这里Reflect.get传入数组和下标返回对应value
return Reflect.get(target, prop, receiver);
// return target[prop]
}
})
}
console.log(proxy(arr)[-1])
在Proxy里需要操作原对象,就要用Reflcet
死循环
什么情况下有,我理解下来是两种:
- 如果是有访问器属性的,就要用Reflect
- 如果是原型继承的,也就是某个对象A有name这个属性,然后被代理了赋给变量p,后面有个对象B原型是p,同样这个对象B也有name属性,此时就不得不用receiver