Javascript面试问题:使[1,2,3].sum()运行

Javascript面试问题:使[1,2,3].sum()运行,javascript,Javascript,Javascript访谈问题:使[1,2,3].sum()精确运行代码,而不使用原型和对象。定义属性,对象。定义属性 因为这是一个面试问题,我想有办法让它工作吗 感谢您的帮助/指点 谢谢你可以用披萨 前言:像这样的问题并不能真正说明某人是一个“好”程序员,这只是意味着他们熟悉该语言中的技巧,这些技巧不会导致更易于维护的代码。如果在一家经常使用这种技巧的公司或团队工作,我会很谨慎 (就我个人而言:当我还是微软的SE时,我在Chakra JavaScript引擎上工作,我喜欢认为我对JavaScri

Javascript访谈问题:使
[1,2,3].sum()精确运行代码,而不使用
原型
对象。定义属性
对象。定义属性

因为这是一个面试问题,我想有办法让它工作吗

感谢您的帮助/指点


谢谢

你可以用披萨 前言:像这样的问题并不能真正说明某人是一个“好”程序员,这只是意味着他们熟悉该语言中的技巧,这些技巧不会导致更易于维护的代码。如果在一家经常使用这种技巧的公司或团队工作,我会很谨慎

(就我个人而言:当我还是微软的SE时,我在Chakra JavaScript引擎上工作,我喜欢认为我对JavaScript/ECMAScript非常了解,并且我仍然需要花很长时间思考如何在不使用
prototype
defineProperty
的情况下实现这一点-所以我认为这不是一个好的技术面试问题如果他们希望得到一个直截了当的答案——但如果这是一个旨在促使你向面试官提问的面试问题,那就不同了)


选项1:全局错误处理程序: 这里有一个可怕的方式:

window.addEventListener('error',函数(e){
if(例如ErrorEvent的error instanceof | |例如TypeError的error instanceof){
const msg=e.error.message;
常量后缀x=msg.indexOf(“.sum不是函数”);
如果(后缀x>-1){
常量arrayStr=msg.substring(0,后缀x);
const arr=eval(arrayStr);//和+e,0);
console.log(总计);//6
}
}
} );

[1,2,3].sum()
我们能在这里绕行多少

假设我们希望下面的代码行正常工作
[1,2,3].sum()然后我们可以很容易地让它做一些事情。请注意,由于存在数组,因此不需要数组。可能是阵列访问,其中包含


({3:{sum:()=>console.log(6)}})/@Dai实际上不起作用-数组文字不仅仅是查找作用域链中的
array
(这就是
newarray()
将要做的)-它实际上是去初始化一个本机数组,不管是什么占据了
窗口.Array
。您是否签署了保密协议并同意不分享采访问题?@VLAZ以前(比如2010年之前)浏览器在遇到文字时会使用用户提供的
Array
构造函数。JavaScript数组文本不是由解析器/编译器初始化的,而是在遇到时初始化的。实际的约束是什么?您不允许对原型执行任何操作,或者您不允许使用
prototype
作为属性,或者您不允许使用“prototype”一词?还是什么?我是说。。他们正在寻找的正确答案可能是“没有(好的)方法来做到这一点”,也许是为了看看你是否愿意给出一些骇客的东西,而不是放下你的脚。
\uuuuuu proto\uuuuu
是一个例子,不是一回事。我明白你的意思。如果<>代码>原原型> 不考虑与“代码>原型< /CODE >相同,可以被接受作为答案,那么<代码> StimeTimeType 这将是更好的解决方案:它是可怕的。我喜欢!哦,天哪@RinkeshGolwala请不要在任何真正的代码库中使用它。不管你多么恨你的同事。哦,是的,好老阿西;)如果允许在代码前加上行,那么这是一个可行的黑客@FZs我假设允许在之前添加行。否则,我甚至不确定你是否能够实施任何实际的黑客攻击。这是他们的错,他们没有做
;[1,2,3]
:p这是真的。。。(只要他们不要求它是一个单独的声明)。不管怎么说,回答得真棒@FZs嘿,我只能满足这里给出的要求。不过,我们很可能无法真正回答这个问题——也许这是为了促使大家讨论目标到底是什么。也许预期的结果是说“不,这不可能”。谁知道呢。我个人并不喜欢这个面试问题,但是嘿。我的观点是,面试中的任务应该是实用的,并且与你通常遇到的任务相似。FizzBuzz有很好的理由受到抨击,但它仍然比这样的开放式问题要好。我喜欢你的答案,不想批评,只是这些是我看了之后想到的东西。。。