首页 > 解决方案 > 添加到 Object.prototype 的方法无限重复

问题描述

我正在使用浏览器控制台来提高我的 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 添加方法。(如果我错了请纠正我)

这仅用于学习目的。

您能否向我解释一下,为什么这种方法的行为如此?

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

非常感谢你!

标签: javascriptmethodsprototypefor-in-loop

解决方案


因为JSON.stringify()要检查对象是否有方法,如果有方法toJSON,它将调用toJSON

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

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


推荐阅读