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

时间:2019-03-08 06:13:05

标签: 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添加方法。 (如果我错了,请纠正我)

这仅用于学习目的。

能否请您向我解释为什么这种方法的行为会如此?

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

非常感谢您!

1 个答案:

答案 0 :(得分:1)

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

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

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