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)
这是我曾经遇到过的一个面试题。
这听起来像是对旧的可变可链接sum函数难题的新尝试,使用代理成员访问而不是函数调用。不过,可能的方法仍然相同,并且\xe2\x80\xa6+1表明他们正在寻找解决valueOf方案。同样,foo+1将是1和+foo/Number(foo)将是0。
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); // 601Run Code Online (Sandbox Code Playgroud)\r\n| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |