Skip to content

使用代理拦截动态属性

Code

ts
const r1 = add[1][2][3] + 4 // 期望结果 10
const r2 = add[10][20] + 30 // 期望结果 60
const r3 = add[100][200][300] + 400; // 期望结果 1000
console.log(r1);
console.log(r2);
console.log(r3);

解析

ts
function createProxy(value = 0) {
  const toPrimitive = () => value
  return new Proxy({}, {
    get(target, key) {
      if (key === Symbol.toPrimitive) {
        return toPrimitive
      }
      return createProxy(value + Number(key));
    }
  })
}
const add = createProxy()