javascript - 覆盖现有的 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();
如果有人能解释这种现象,那就太棒了!
解决方案
我认为这是节点引擎中的东西。
如果我使用 V8 引擎,它会按预期工作。
https://tio.run/##y0osSyxOLsosKNEts/j/37GoKLFSr6AovyS/pLIgVa8gv0DBViGtNC@5JDM/T0NToZpLQSE5P684PydVLyc/XaMkI7NY05qrlosLJFqikAhUHm2oo2Cko2Aca82VCDJBQ/P/fwA
但不适用于节点引擎。
另外:
如果您更改pop
为slice
,则无论引擎如何,它都可以正常工作。
所以我们可能只是推断这是节点中的一个错误Array.prototype.pop
推荐阅读
- laravel - 使用 rest api 压缩图像
- python - 如何绘制带有字符的元组
- dart - 如何在堆栈中定位小部件,但不匹配父级的宽度/高度?
- amazon-web-services - 带有 AWS 服务模板的 Git Webhooks 不起作用
- c# - 无法删除有帖子的作者
- javascript - 使用javascript生成一个固定长度的随机数,即70
- javascript - 小标签不适用于输入标签
- javascript - 如何在php中上传后显示图像处理同一页面上的AJAX请求
- svg - 在 SED 中将 SVG 路径分离为其可见组件的正确方法是什么?
- ios - 如何在 PJSIP 2.8 for iOS 中启用 WebRTC AEC?