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

时间:2019-01-23 04:18:01

标签: javascript node.js

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

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

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

const a = [1, 2, 3];

a.pop();

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

1 个答案:

答案 0 :(得分:0)

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

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

但不适用于节点引擎。

加号:
如果将pop更改为slice,则不管引擎如何,它都可以正常工作。

所以我们可能只是推断出它是Array.prototype.pop节点内的错误