【发布时间】:2012-09-29 12:51:35
【问题描述】:
场景
阅读this answer 后,我意识到我可以从 JSON 文字开始创建对象。
所以我猜我可以使用这个有用的 JSON 方法做相反的事情:
JSON.stringify(myObject).
所以我做了如下:
function MyObject(id, value, desc)
{
this.id = id;
this.value = value;
this.desc = desc;
this.toJSON = function()
{
return JSON.stringify(this);
}
}
但是当我运行这些东西 (demo) 时,会出现 Maximum call stack size exceeded 错误。
在谷歌上搜索了一下后,我找到了两个解释这种行为的参考资料:
- MDN 中的 JSON.stringify() 方法。
- JSON in Javascript JSON.org 上的文章
如果我猜对了,.toJSON 会覆盖 .stringify。因此,如果第一个调用第二个,则会生成一个循环。
问题
- (一般)为什么选择这种设计?
toJSON是一种特殊关键字的保留? - (具体)我解决了将
.toJSON名称更改为.display的stackoverflow 错误。没有那么优雅。还有其他解决方案吗?
【问题讨论】:
-
+1 用于使用 stackoverflow 关键字。不,开玩笑,这是个好问题。
-
@ADC 记得接受您的未决问题。
-
如果没有什么特别之处,为什么要使用自定义的
toJSON方法?
标签: javascript json oop design-patterns