javascript - 添加到 Object.prototype 的方法重复无限次

标签 javascript methods prototype for-in-loop

我正在摆弄浏览器控制台来提高我的 JavaScript 技能。

当我尝试向 Object.prototype 添加一个方法(以 json 形式返回其实例)时,发生了一些奇怪的事情:

在方法结束时,它跳回 for-in 循环并再次执行。一遍又一遍...

它不会返回任何内容,只是继续跳回并重复。

代码:

Object.prototype.toJSON = function() {
  var tempObj = {}; 
  for (let key in this) {
    if (this.hasOwnProperty(key)) { 
      let value = this[key];
      tempObj[key] = value;
    }
  }
  return JSON.stringify(tempObj); 
}

我知道你不应该向 Object.prototype 添加方法。 (如有错误请指正)

这仅用于学习目的。

你能向我解释一下为什么这个方法会这样吗?

我不想知道它是如何工作的,而是为什么它不起作用。 :)

非常感谢!

最佳答案

因为 JSON.stringify() 会检查对象是否有方法 toJSON,如果有的话就会调用 toJSON

您将源 toJSON 替换为您的,并在您的 toJSON 中调用 JSON.stringify(),因此创建了一个调用循环。

检查一下: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description

关于javascript - 添加到 Object.prototype 的方法重复无限次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55057689/

相关文章:

javascript - 从子对象修改原型(prototype)上的字段

javascript - 无法使用 Electron 和 Socket io 关闭窗口

javascript - 您将如何在同一行中将 Math.abs 和 toLocaleString() 链接在一起?

iphone - :something:something Method Format? 的东西

javascript - 使用原型(prototype)创建数组,其方法实现数组原型(prototype)的包装器

javascript - 为什么我的原型(prototype)不执行?

javascript - 创建在单个服务器上运行的 meteor.js 应用程序的多个实例所需的主要步骤是什么?

javascript - 在 jQuery 中使用 val() 有时会失败并使用数组 id 设置元素的问题

javascript - 排队 YouTube 视频

java - 从java中的方法返回一个数组?