var t = {};
t.toJSON = function () { alert('meuh'); return (''); }
JSON.stringify(t)
Прекрасно работает для меня.
Он предупреждает, поэтому вызывает метод toJSON соответствующим образом (в Chrome 8).
EDIT:
Это нормально . Ваш Foo является функцией, и объекты функций не допускаются в JSON. Я думаю, Firefox просто прощает.
Ну, на самом деле, мне интересно, я не нахожу четкого ответа в стандарте. Учитывая, что вы предоставляете toJSON () для обеспечения собственной сериализации, разрешено это или нет. Но в любом случае, это причина вашей неудачи.
Если вы отредактируете свой пример jsFiddle следующим образом, toJSON
будет соответственно вызван на foo
.
var obj = function(){
this.foo = 'test'; // OK
//this.foo = function(){ }; KO
this.foo.toJSON = function(){
return 'foo';
};
this.bar = 'bar';
}
var ins = new obj();
var json = JSON.stringify( ins );
document.write( json );