首页 > 解决方案 > 覆盖现有的 JavaScript Array.prototype 方法会导致无限递归?

问题描述

我知道这pop()是 JavaScript 数组中的内置方法。我只是在玩耍,为了踢球决定覆盖内置的原型方法并遇到了这种情况,并且没有解释引擎盖下发生了什么。

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

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

const a = [1, 2, 3];

a.pop();

如果有人能解释这种现象,那就太棒了!

标签: javascriptnode.js

解决方案


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

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

但不适用于节点引擎。

另外:
如果您更改popslice,则无论引擎如何,它都可以正常工作。

所以我们可能只是推断这是节点中的一个错误Array.prototype.pop


推荐阅读