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

Method added to Object.prototype repeats infinite times

我正在使用浏览器控制台来提高我的 javascript 技能。

当我尝试向 Object.prototype 添加一个方法时,return 的实例是 json,奇怪的事情发生了:

就在方法的最后,它跳回到for-in循环并再次执行。一遍又一遍...

它没有return任何东西,只是继续跳回并重复。

代码:

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