覆盖现有的JavaScript Array.prototype方法会导致无限递归吗?

坦维尔

我知道这pop()是JavaScript数组中的内置方法。我只是在玩耍,踢了脚步就决定要覆盖内置的原型方法,并遇到这种情况,并且无法解释到底发生了什么。

当在Node REPL或文件中运行以下代码时,它在Windows 10系统中以无限递归方式创建。我正在运行的Node版本是8.9.1。

Array.prototype.pop = function() {
  console.log(this);
}

const a = [1, 2, 3];

a.pop();

如果有人可以解释这种现象,那就太好了!

尼克·赫雷斯纳

我认为这是节点引擎中的东西。

如果我使用V8引擎,它会按预期工作。
https://tio.run/##y0osSyxOLsosKNEts/j/37GoKLFSr6AovyS/pLIgVa8gv0DBViGtNC@5JDM/T0NToZpLQSE5P684PydVLyc/XaMkI7NY05qrlosLJFqikAhUHQ2ca2

但不是使用节点引擎。

另外:
如果你改变popslice,它工作得很好,无论发动机。

因此,我们可以推断出这是节点中的错误 Array.prototype.pop

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章