シナリオ
この回答を読んだ後、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
エラーが発生します。
少しグーグルで調べたところ、この動作を説明する2つの参考文献が見つかりました。
- MDNのJSON.stringify()メソッド。
- JSON.orgのJSON in Javascriptの記事
私が正しければ.toJSON
、.stringify
. したがって、最初のものが 2 番目のものを呼び出すと、ループが生成されます。
質問
- (全般) なぜこのデザインを選択したのですか?
toJSON
は特別なキーワードの一種の予約ですか? .toJSON
(特定)名前を に変更して、stackoverflow のバグを解決しまし.display
た。それほどエレガントではありません。別の解決策はありますか?