添加到 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()
,因此创建了一个调用循环。
我正在使用浏览器控制台来提高我的 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()
,因此创建了一个调用循环。