如何使 `foo[1] ==1; foo[1][2]==3; foo[1][2][3]==6` 在 JavaScript 中工作吗?

Mur*_*hen -4 javascript es6-proxy

如何定义foo以使以下代码按预期正确工作(在 JavaScript 中)?

foo[1] + 1             // 2
foo[1][2] + 1          // 4
foo[10][20][30] + 1    // 61
foo[100][200][300] + 1 // 601
Run Code Online (Sandbox Code Playgroud)

这是我曾经遇到过的一个面试题。

Ber*_*rgi 5

这听起来像是对旧的可变可链接sum函数难题的新尝试,使用代理成员访问而不是函数调用。不过,可能的方法仍然相同,并且\xe2\x80\xa6+1表明他们正在寻找解决valueOf方案。同样,foo+1将是1+foo/Number(foo)将是0

\n

\r\n
\r\n
const handler = {\n    get(target, propName, receiver) {\n        if (typeof propName == \'string\' && /^\\d+$/.test(propName))\n            return sumProxy(target + parseInt(propName, 10));\n        else\n            return Reflect.get(target, propName, receiver);\n    }\n};\nfunction sumProxy(value) {\n    return new Proxy({\n        valueOf() { return value; }\n    }, handler);\n}\nconst foo = sumProxy(0);\n\nconsole.log(foo + 1);                // 1\nconsole.log(foo[1] + 1);             // 2\nconsole.log(foo[1][2] + 1);          // 4\nconsole.log(foo[10][20][30] + 1);    // 61\nconsole.log(foo[100][200][300] + 1); // 601
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n